次のようなデータがあります。
0 1 0 0
0 0 0 1
0 0 0 1
0 1 0 0
awk を使用して、同じ列に 1 を含むすべての直後の行を出力したい どうすればいいですか?
編集:
「$ 1-1」のような前の列を指定する方法はawk内にありますか(私はそれが間違っていることを知っています)?
これは非常に単純化されていますが、サンプル データで機能します。
awk '$0 == prev {print} {prev = $0}' inputfile
両方の行 (同一) を印刷する場合:
awk '$0 == prev {print; print} {prev = $0}' inputfile
また
awk '$0 == prev {print prev; print} {prev = $0}' inputfile
1行に正確に1つ あると仮定しました1
。さらに、データがdata.inputにあると仮定します。
利用方法:
awk -f foo.awk data.input
foo.awk:
function printBlock() {
for(i=0; i<N; i++) {
print BLOCK[i];
}
}
{
for(col=1; col<=NF; col++) {
if($col==1) break;
}
if(col != last_col) {
if(N > 1) {
printBlock()
}
N = 0
}
BLOCK[N++] = $0;
last_col = col;
}
END {
if(N > 1) {
printBlock()
}
}