0

次のようなデータがあります。

    0 1 0 0
    0 0 0 1
    0 0 0 1
    0 1 0 0

awk を使用して、同じ列に 1 を含むすべての直後の行を出力したい どうすればいいですか?

編集:

「$ 1-1」のような前の列を指定する方法はawk内にありますか(私はそれが間違っていることを知っています)?

4

2 に答える 2

1

これは非常に単純化されていますが、サンプル データで機能します。

awk '$0 == prev {print} {prev = $0}' inputfile

両方の行 (同一) を印刷する場合:

awk '$0 == prev {print; print} {prev = $0}' inputfile

また

awk '$0 == prev {print prev; print} {prev = $0}' inputfile
于 2012-08-01T19:27:42.260 に答える
0

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()
    }
}
于 2012-08-01T18:55:34.017 に答える