awk使用法之:行をマージ
1526 ワード
awk行のマージ方法
たとえば、「^AAAAAA」の先頭の行と、その後ろの行を1行にまとめ、他の行が正常に出力されます.
スクリプト:
実行結果:
主な手順:は「AAAA」の先頭の行に出会い、foundタグを付け、行の内容をbufferに保存します. 他のローに遭遇しました: 現在foundがtrueとマークされている場合、bufferのコンテンツと現在の行のコンテンツが印刷され、この動作は行をマージする機能として機能する. 現在のfoundがfalseとマークされている場合は、他の行であり、通常印刷されます.
BEGINは、データファイルが何行あるかにかかわらず、スクリプトの開始時に一度だけ処理されます. スクリプトの3行目にはnext命令があり、スクリプトの現在の行に対する処理を直接終了し、次の行のデータ入力を処理することを意味する.逆にnext命令がなければ、後の文は実行され続け、私たちの例では、「AAAA」の先頭の行は2回印刷され、後のマージは無効になります.運転の結果を見る:
5行目
たとえば、「^AAAAAA」の先頭の行と、その後ろの行を1行にまとめ、他の行が正常に出力されます.
$ cat -n t.txt
1 prefixion 1
2 AAAA aaaa
3 appending 1
4 BBBB bbbb
5 prefixion 2
6 AAAA aaaa
7 appending 2
8 CCCC cccc
スクリプト:
$ cat -n t.sh
1 awk '
2 BEGIN { found=0; buffer="" }
3 /^AAAA / { found=1; buffer=$0; next }
4 { if (found == 1) {
5 printf "%s %s
", buffer, $0
6 found=0
7 } else {
8 printf "%s
", $0
9 }
10 }
11 ' t.txt
実行結果:
prefixion 1
AAAA aaaa appending 1
BBBB bbbb
prefixion 2
AAAA aaaa appending 2
CCCC cccc
主な手順:
prefixion 1
AAAA aaaa AAAA aaaa
appending 1
BBBB bbbb
prefixion 2
AAAA aaaa AAAA aaaa
appending 2
CCCC cccc
5行目
printf "%s %s
", buffer, $0
のため、bufferの内容と$0の内容は同じであり、すなわち「AAAA」の先頭の行である.