次のテキストファイルがあるとしましょう。
R1 12 324 3453 36 457 4 7 8
R2 34 2342 2525 25 25 26 26 2 2
R3 23 2342 32 52 54 543 643 63
R4 25 234 2342 4 234242
awk
この行を別の方法で処理したいと思います。
awk '/R1/ { print "=>" $0} /R2/ { print "*" $0} '
また、残っているすべての行をそのまま印刷したいです(すでに処理した行を繰り返さずに)。デフォルトでは、 /ELSE/ { print $0}
行の末尾に1つを追加する必要がありますawk
。
そんなことありますか?
ベストアンサー1
簡素化されたアプローチawk
awk '/R1/ {print "=>" $0;next} /R2/{print "*" $0;next} 1' text.file
[jaypal:~/Temp] cat text.file
R1 12 324 3453 36 457 4 7 8
R2 34 2342 2525 25 25 26 26 2 2
R3 23 2342 32 52 54 543 643 63
R4 25 234 2342 4 234242
[jaypal:~/Temp] awk '/R1/ { print "=>" $0;next} /R2/{print "*" $0;next}1' text.file
=>R1 12 324 3453 36 457 4 7 8
*R2 34 2342 2525 25 25 26 26 2 2
R3 23 2342 32 52 54 543 643 63
R4 25 234 2342 4 234242
[jaypal:~/Temp]
パターン{Action}お問い合わせの画期的な進歩:
/R1/ { print "=>" $0;next}
:/R1/
印刷ジョブを含む行が実行されることを示します。これは、awkステートメントの残りの部分が無視され、次の行がレビューされることを意味します。=>
next
/R2/{print "*" $0;next}
: これは、pattern /R2/
印刷ジョブに一致する行が実行されることを意味します。処理が始まる*
と、awk
最初のpattern {action}
文は無視されます。これで2番目のドアが完了します。これは、もはや処理を必要とせず、適切に次の行に移動することを意味します。pattern /R1/
/R2/
pattern {action}
next
awk
1
すべての行を印刷します。条件が指定されていない場合、{action}
awkはデフォルトでusingを使用します{print}
。ここの条件は1
trueと解釈されるので、常に成功します。この点に達すると、最初と2番目のステートメントは無視または無視されるためです(およびをpattern {action}
含まない行の場合)。したがって、基本印刷ジョブは残りの行で行われる。/R1/
/R2/