【问题标题】:matching records in awkawk 中的匹配记录
【发布时间】:2012-04-02 22:12:32
【问题描述】:

我有一个像这样的单个字段的文件;

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

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

【问题讨论】:

  • 行用空行分隔?
  • 不,行与行之间不应有空格。

标签: awk


【解决方案1】:
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}
    '
    

    【讨论】:

      【解决方案3】:
      awk -F '|' 'x!=$1{x=$1; y+=(NR==1?0:100000)}; {print $0, y}' input.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-18
        • 2021-12-31
        • 1970-01-01
        • 2011-11-27
        • 1970-01-01
        • 2014-01-20
        • 2020-04-16
        相关资源
        最近更新 更多