sed或awk:替换为先前出现的计数

  • 本文关键字:awk 替换 sed awk sed
  • 更新时间 :
  • 英文 :


在一个文本文件中看起来像:

label_a 8 label_b 5
label_c 9 label_a 3
label_a 2 label_c 16
label_b 21 label_b 1
...

如何将这些数字替换为前一个标签先前出现的实际计数,因此结果看起来像:

label_a 1 label_b 1
label_c 1 label_a 2
label_a 3 label_c 2
label_b 2 label_b 3
...

awk是此工作的更好工具:

awk '{for (i=2; i<=NF; i+=2) $i = ++freq[$(i-1)]} 1' file

label_a 1 label_b 1
label_c 1 label_a 2
label_a 3 label_c 2
label_b 2 label_b 3

给定您的输入,您可以执行:

$ awk '{for (i=1; i<NF;i+=2) printf "%s %s ", $i, ++arr[$i]; print ""}' file
label_a 1 label_b 1 
label_c 1 label_a 2 
label_a 3 label_c 2 
label_b 2 label_b 3 

最新更新