2012-04-02 152 views
0

我有一個像這樣的單個字段的文件;awk中的匹配記錄

scaffold10017|size24957-5236 
scaffold10017|size24957-5236 
scaffold10017|size24957-5236 
scaffold10017|size24957-7124 
scaffold10076|size19532-3212 
scaffold10076|size19532-6287 
scaffold1008|size40169-12384 
scaffold1008|size40169-12399 
scaffold1008|size40169-21350 
scaffold1008|size40169-34740 

我想打印一個新的文件,其中包括本場和第二場與每一個時間的記錄並不在現場了此前的紀錄相匹配的一個值增加值(100,000個)。所以輸出看起來是這樣的:

scaffold10017|size24957-5236 0 
scaffold10017|size24957-5236 0 
scaffold10017|size24957-5236 0 
scaffold10017|size24957-7124 0 
scaffold10076|size19532-3212 100000 
scaffold10076|size19532-6287 100000 
scaffold1008|size40169-12384 200000 
scaffold1008|size40169-12399 200000 
scaffold1008|size40169-21350 200000 
scaffold1008|size40169-34740 200000 

如果有人可以建議如何做到這一點,將不勝感激。

+0

行之間用空行隔開? – kev 2012-04-02 13:59:14

+0

不,行之間不應有空格。 – user1308144 2012-04-02 14:03:23

回答

1
awk -F '|' 'x!=$1{x=$1; y+=(NR==1?0:100000)}; {print $0, y}' input.txt 
+0

謝謝一百萬。它工作得很好。 – user1308144 2012-04-02 14:10:50

2
awk ' 
    BEGIN { flag = 0 } 
    NR>1 && prev != $1 { 
    prev = $1 
    flag += 100000 
    } 
    { print $1"|"$2, flag }' 

您還可以設置flag = -100000最初並消除條件NR>1對於第二種情況。

2
awk -F\| -v value=-100000 ' 
    $1 != prev {value += 100000; prev = $1} 
    {print $0, value} 
'