Probablement la méthode la plus efficace, si vous êtes à l'aide de l' bash
shell (et tu sembles l'être, en fonction de vos commentaires), est d'utiliser la sous-chaîne variante de l'expansion de paramètres:
long=USCAGol...
short=${long:0:2}
echo ${short}
Ce sera mis en short
à être les deux premiers caractères de l' long
. Si long
plus courte que les deux personnages, short
sera identique.
C'est généralement préférable si vous allez faire beaucoup (50 000 fois par rapport comme vous le mentionnez), car il n'y a pas de processus de création de surcharge. Toutes les solutions qui utilisent des programmes externes vont souffrir de cette surcharge.
Si vous voulait également s'assurer un minimum de longueur, vous pouvez pad avant d'en faire la main avec quelque chose comme:
tmpstr="${long}.."
short=${tmpstr:0:2}
Cela permettrait de s'assurer que rien de moins que deux caractères a été complété à droite avec des périodes (ou quelque chose d'autre, juste en changeant le caractère utilisé lors de la création d' tmpstr
). Il n'est pas évident que vous avez besoin de cela, mais je pensais que je l'avais mis dans l'exhaustivité.
Cela étant dit, il ya un certain nombre de façons de le faire avec des programmes externes (tels que si vous n'avez pas bash
disponible pour vous), parmi lesquels:
short=$(echo ${long} | cut -c1-2)
short=$(echo ${long} | head -c2)
short=$(echo ${long} | awk '{print substr ($0, 0, 2)}'
short=$(echo ${long} | sed 's/^\(..\).*/\1/')
Les deux premiers (cut
et head
) sont identiques pour une seule ligne de chaîne - ils fondamentalement juste vous donner en retour, les deux premiers caractères. Ils diffèrent en ce que cut
vous donnera les deux premiers caractères de chaque ligne, head
vous donnera les deux premiers caractères de l'ensemble de l'entrée
Le troisième utilise l' awk
fonction de sous-chaîne à extraire les deux premiers caractères et le quatrième utilise sed
groupes de capture (à l'aide d' ()
et \1
) pour capturer les deux premiers caractères et remplacer l'ensemble de la ligne avec eux. Ils sont à la fois semblable cut
- ils livrer les deux premiers caractères de chaque ligne dans l'entrée.
N'a plus d'importance si vous êtes sûr que votre entrée est une seule ligne, ils ont tous un effet identique.