2012-04-02 88 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} 
'