私はこの質問を見て似たようなことをしたかったです。列の値が変更された場合の行の印刷
デフォルトでは、次の(タブ区切り)ファイルがあります。
A 0 10 loss
A 10 20 loss
A 20 30 loss
A 30 40 no
A 40 50 no
A 50 60 no
A 60 70 no
A 70 80 gain
...
列 4 が "loss" -> "no" または "no" -> "gain" から変更される 2 行を印刷したいので、出力は次のようになります。
A 20 30 loss
A 30 40 no
A 60 70 no
A 70 80 gain
列4の値は何でも可能ですが、変更を含む2行を印刷したいと思います。
これはawkでできるように見えますが、あまり慣れていません。
ベストアンサー1
これにより、awk
次のことができます。
awk 'BEGIN { getline; cmp=$4; preline=$0 }
cmp!=$4{ print preline, $0 } { cmp=$4; preline=$0 }' OFS='\n' infile
A 20 30 loss
A 30 40 no
A 60 70 no
A 70 80 gain
BEGIN
ブロックから最初の行を読み取り、名前付き変数cmp
に列#4を格納し、preline
後で前の行の列#4を現在の行の列と比較し、変更値があり、preline
読み取った値が印刷されます。現在$0
の行基準次のブロックは単に現在の行の4番目の列を更新し、次の実行時に行全体を前の行に更新します。