Dans awk, j'ai 2 champs: 1 $ et 2 $.
Ce sont deux chaînes que je veux concaténer et assigner à une variable.
Tu peux dire:
awk '{b=$1$2; print b}' file
Si vous voulez avoir un espace entre les deux, faites:
awk '{b=$1" "$2; print b}' file
Ce qui revient en fait à utiliser FS
, car sa valeur par défaut est l’espace:
awk '{b=$1 FS $2; print b}' file
$ cat a
hello how are you
i am fine
$ awk '{b=$1$2; print b}' a
hellohow
iam
$ awk '{b=$1 FS $2; print b}' a
hello how
i am
Vous pouvez jouer avec elle dans ideone: http://ideone.com/4u2Aip
Pourrait utiliser sprintf
pour accomplir ceci:
awk '{str = sprintf("%s %s", $1, $2)} END {print str}' file
La concaténation de chaînes dans awk peut être réalisée à l'aide de la commande d'impression page de manuel AWK , et vous pouvez effectuer une combinaison compliquée. J'essayais ici de changer le caractère 16 en A et d'utiliser la concaténation de chaînes:
echo CTCTCTGAAATCACTGAGCAGGAGAAAGATT | awk -v w=15 -v BA=A '{OFS=""; print substr($0, 1, w), BA, substr($0,w+2)}'
Output: CTCTCTGAAATCACTAAGCAGGAGAAAGATT
J'ai utilisé la fonction substr pour extraire une partie de l'entrée (STDIN). J'ai transmis des paramètres externes (ici, j'utilise des valeurs codées en dur) qui sont généralement des variables Shell. Dans le contexte de la programmation Shell, vous pouvez écrire -v w = $ width -v BA = $ my_charval. La clé est l'OFS, qui signifie "Output Field Separate in awk". La fonction d'impression prend une liste de valeurs et les écrit dans le STDOUT et les colle avec le OFS. Ceci est analogue à la fonction de jointure Perl.
Il semble que dans awk, string puisse être concaténé en imprimant des variables les unes à côté des autres:
echo xxx | awk -v a="aaa" -v b="bbb" '{ print a b $1 "string literal"}'
# will produce: aaabbbxxxstring literal
Vous pouvez également concaténer des chaînes de plusieurs lignes avec des espaces.
cat fichier.txt Apple 10 oranges 22 raisins 7
Exemple 1:
awk '{aggr = aggr "" $ 2} END {print aggr}' fichier.txt
10 22 7
Exemple 2:
awk '{aggr = aggr "," $ 1 ":" $ 2} END {print aggr}' fichier.txt
, Pomme: 10, oranges: 22, raisins: 7