![按文件中出现的次数编号](https://linux22.com/image/112730/%E6%8C%89%E6%96%87%E4%BB%B6%E4%B8%AD%E5%87%BA%E7%8E%B0%E7%9A%84%E6%AC%A1%E6%95%B0%E7%BC%96%E5%8F%B7.png)
我下面有一个文件。我需要根据第二个和第四个组合字段的出现次数对第一个字段重新编号。第三和第五字段无关紧要。想法?输入文件按以下顺序排序:
sort -t',' -k2,2n -k4,4 -k5,5rn
输入:
1,01053,11315,ABC,-38,Sin
1,01053,11315,ABC,-88,Sin
1,01053,11315,CDE,-114,Sin
1,2003700,11314,ABC,-1,Sin
1,2003700,11314,CDE,-44,unit
1,2003700,11314,CDE,-72,unit
1,2003700,11314,CDE,-694,Sin
我想要的输出:
1,01053,11315,ABC,-38,Sin
2,01053,11315,ABC,-88,Sin
1,01053,11315,CDE,-114,Sin
1,2003700,11314,ABC,-1,Sin
1,2003700,11314,CDE,-44,unit
2,2003700,11314,CDE,-72,unit
3,2003700,11314,CDE,-694,Sin
答案1
由于文件是按照第二个和第四个字段排序的,因此需要按顺序编号的行是连续的。因此逐行处理文件。如果一行与前一行位于同一序列中,则增加序列号,否则将序列号重置为 1。
awk -F, '{
if ($2 FS $4 == previous) i++; else i=1;
sub(/^[^,]*/, i);
print;
previous = $2 FS $4;
}'