首页 > 解决方案 > 如何在新列中打印 KSH 中 1 列的总数?

问题描述

我试图在 txt 文件中添加一个带有总数的新列而不删除其他列,已经在 stackoverflow 中找到了一个帖子但是

cut -f1 test.txt | uniq -c | join -2 2 test.txt -

对我不起作用,帖子中的其他选项也没有,我的意思是在那篇帖子中没有回答我的问题,有人可以帮忙吗?

测试.txt:

Apple_1   1      300
Apple_2   1      500
Apple_2   500    1500
Apple_2   1500   2450
Apple_3   1      1250
Apple_3   1250   2000

预期输出:

Apple_1   1      300    1
Apple_2   1      500    3
Apple_2   500    1500   3
Apple_2   1500   2450   3
Apple_3   1      1250   2
Apple_3   1250   2000   2

已经尝试过一些正则表达式和 awk,例如:

awk '{count[$1]++} END {for (word in count) print word, count[word]}' file

awk '{ print $0 "\t" ++count[$1] }'

标签: linuxbashunixawkksh

解决方案


您需要浏览文件两次,一次计算计数,第二次打印附加计数的所有行。

awk 'FNR == NR {count[$1]++; next}
     {print $0 "\t" count[$1]}' file file

FNR == NR读取第一个文件时为真。


推荐阅读