在一个文本文件中看起来像:
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