匹配awk中的记录

时间:2012-04-02 13:55:33

标签: 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

如果有人能建议如何做到这一点,将不胜感激。

3 个答案:

答案 0 :(得分:2)

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

您最初也可以设置flag = -100000,并从第二种情况的条件中删除NR>1

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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