簡體   English   中英

Linux awk列比較

[英]Linux awk Columns Comparison

我有看起來像這樣的數據:

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

我想使用awk在同一列中直接打印所有后續的行,並以1開頭。 我該怎么做?

編輯:

在awk中沒有辦法指定上一列,例如“ $ 1-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

我假設每行有一個精確的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()
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM