用递增的数字替换单词

时间:2012-05-17 18:26:00

标签: sed substitution

我有一个大文本文件,其中DATA字出现的次数超过10000次。我想知道如何进行条件替换,所以它第一次出现在文档中,它被改为NO1,第二次出现在NO2,依此类推,使用bash。我正在考虑使用bash的一些复杂的脚本,但我猜想必须有一个更简单的方法。

2 个答案:

答案 0 :(得分:5)

perl -pe 's/DATA/ "NO" . ++$n /ge' file_in > file_out

答案 1 :(得分:1)

 awk '{
     for (i=1;i<=NF;i++) { 
          if ($i == "DATA") printf("%s%s", "NO"++n, OFS); 
           else  printf("%s%s", $i, OFS)      
          if (i==NF) printf "\n"
     }      
  }' file > outFile

正如格伦杰克曼正确地指出的那样,这可以归结为

awk '{for (i=1; i<=NF; i++) if ($i=="DATA") $i = "NO" ++n} {print}' file > outFile

我保留原始版本以显示替代(但过度)的方法; - )

我希望这会有所帮助。