2012-08-01 51 views
0

我有數據,看起來像這樣:的Linux awk的列比較

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

我想打印用ls所有直接後續行同一列,用awk。我將如何做到這一點?

編輯:

有AWK內無法指定前一列,像「1-1 $」(我知道那不對BTW)?

+1

商店上一行的數組中的值。 – tripleee 2012-08-01 18:03:02

+0

通過你的問題陳述,最後一行不應該被打印;那是對的嗎? – tripleee 2012-08-01 18:04:55

+0

應該打印的唯一行是第2行和第3行。 – 2012-08-01 18:17:13

回答

0

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