2012-03-06 71 views
1

分配ID於每行我有一個列,它是通過比較每個復發例如通過柱值在AWK

toto tata AFG 
fff ddd AFG 
ff hhh AWM 
qqq ttt AWM 

我想有像

toto tata AFG 1 
fff ddd AFG 1 
ff hhh AWM 2 
qqq ttt AWM 2 

的輸出的表格文件使用第四列到下一行

使用awk可以快速執行嗎?

thx求助

回答

5
awk '$3 != current {id++; current=$3} {print $0, id}' 
1

將輸入放入文件中。

$> cat ./text 
toto tata AFG 
fff ddd AFG 
ff hhh AWM 
qqq ttt AWM 

對於每一行,我們應該記住$ 3-st值並檢查它是否與前一個值相等。如果這是真的 - 我們應該增加迭代器。

awk ' 
BEGIN { 
    prevValue = ""; 
    value = ""; 
    iterator = 0; 
} 
{ 
    prevValue = value; 
    value = $3; 
    if (value != prevValue) 
     iterator++; 
    printf $0 " " iterator "\n" 
}' ./text 

所以我們得到的是這個

toto tata AFG 1 
fff ddd AFG 1 
ff hhh AWM 2 
qqq ttt AWM 2 

UPD: 像喬納森·萊弗勒說,最初的部分是不是真的有必要在這裏。因此,另一種可行的解決方案是:

awk ' 
{ 
    prevValue = value 
    value = $3 
    if (value != prevValue) 
     iterator++ 
    print $0, iterator 
}' ./text 
+1

+1:這是相當冗長;初始化部分可以被假定(你明確地做了'awk'確實隱含的)。 – 2012-03-06 20:50:08