web-dev-qa-db-fra.com

awk - concatène deux variables de chaîne et en assigne une troisième

Dans awk, j'ai 2 champs: 1 $ et 2 $.

Ce sont deux chaînes que je veux concaténer et assigner à une variable.

49
user3738926

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

Tester

$ 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

89
fedorqui

Pourrait utiliser sprintf pour accomplir ceci:

awk '{str = sprintf("%s %s", $1, $2)} END {print str}' file
8
Hongbo Liu

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
2
Kemin Zhou

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

1
Piyush Bansal