我有这样的数据:

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

我想使用awk在同一列中打印所有带有1s的直接后续行。我该怎么做?
编辑:
awk中是否没有办法指定前一列,比如“$1-1”(我知道这是错误的btw)?

最佳答案

我假设每行有一个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()
    }
}

关于linux - Linux awk列比较,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11764795/

10-16 03:36