web-dev-qa-db-ja.com

awk-2つの文字列変数を連結し、3番目の変数に割り当てます

Awkには、$ 1と$ 2の2つのフィールドがあります。

どちらも文字列であり、連結して変数に割り当てます。

49
user3738926

あなたは言うことができます:

awk '{b=$1$2; print b}' file

間にスペースを置きたい場合は、次のようにします。

awk '{b=$1" "$2; print b}' file

実際には、FSを使用するのと同じです。デフォルトはスペースです。

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

Ideoneでそれをいじることができます: http://ideone.com/4u2Aip

89
fedorqui

sprintfを使用してこれを実現できます。

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

Awkで文字列を連結するには、印刷コマンド AWKマニュアルページ を使用します。複雑な組み合わせを行うことができます。ここでは、16文字をAに変更しようとして、文字列連結を使用しました。

echo CTCTCTGAAATCACTGAGCAGGAGAAAGATT | awk -v w=15 -v BA=A '{OFS=""; print substr($0, 1, w), BA, substr($0,w+2)}'
Output: CTCTCTGAAATCACTAAGCAGGAGAAAGATT

Substr関数を使用して、入力の一部(STDIN)を抽出しました。通常はシェル変数であるいくつかの外部パラメーター(ここではハードコードされた値を使用しています)を渡しました。シェルプログラミングのコンテキストでは、-v w = $ width -v BA = $ my_charvalと書くことができます。キーはOFSで、awkのOutput Field Separateを表します。印刷機能は値のリストを取り、それらをSTDOUTに書き込み、OFSでそれらを接着します。これは、Perlの結合機能に似ています。

Awkでは、変数を隣同士に出力することで文字列を連結できるように見えます:

echo xxx | awk -v a="aaa" -v b="bbb" '{ print a b $1 "string literal"}'
# will produce: aaabbbxxxstring literal
2
Kemin Zhou

複数行にわたる文字列を空白で連結することもできます。

cat file.txt Apple 10オレンジ22ブドウ7

例1:

awk '{aggr = aggr "" $ 2} END {print aggr}' file.txt

10 22 7

例2:

awk '{aggr = aggr "、" $ 1 ":" $ 2} END {print aggr}' file.txt

、アップル:10、オレンジ:22、ブドウ:7

1
Piyush Bansal