在linux中计算文件的出现次数

在linux中计算文件的出现次数,linux,awk,count,Linux,Awk,Count,我想计算第3列中每个单词出现的次数。下面是输入 IN A three US B one LK C two US B three US A one IN A one US B three LK C three US B two US A two IN A two US B two 输出应如下所示: IN A three 4 US B one 3 LK C two 5 US B three 4 US A one 3 IN A one 3 US B

我想计算第3列中每个单词出现的次数。下面是输入

IN A three
US B one
LK C two
US B three
US A one
IN A one
US B three
LK C three
US B two
US A two
IN A two
US B two
输出应如下所示:

IN A three    4
US B one      3
LK C two      5
US B three    4
US A one      3
IN A one      3
US B three    4
LK C three    4
US B two      5
US A two      5
IN A two      5
US B two      5
这可能是一种方式

$ awk 'FNR==NR{++a[$3]; next} {print $0, a[$3]}' file file
IN A three 4
US B one 3
LK C two 5
US B three 4
US A one 3
IN A one 3
US B three 4
LK C three 4
US B two 5
US A two 5
IN A two 5
US B two 5
解释 它在文件中循环两次:首先获取数据,然后打印数据

FNR==NR{++a[$3];next}第一次循环时,记录第三个值出现的次数。 {print$0,a[$3]}第二次循环时,打印该行加上计数器值。 要获得更好的输出,还可以使用printf在第3列后打印选项卡:

{printf "%s\t%s\n", $0, a[$3]}

当您多次读取同一个文件时,您可以在大多数shell中将文件更改为文件{,},因此这应该可以工作awk'FNR==NR{++a[$3];next}{print$0,a[$3]}文件{,}。试试echo 1{,}哇,太棒了,谢谢@Jotne。我不会改变答案,因为它可能看起来很混乱,但肯定会写在我的备忘单上:Hai fedorqui如果你希望awk'FNR==NR{++a[$3];next}{print$0,a[$3]}'$printf'文件%.0s{1..2},你也可以将它与Jotne的方法一起添加到你的备忘单上,它有点长,但是如果你必须输入很多文件,比如说10倍于同一个文件,那么这可能是有用的尝试echo$printf'file%.0s'{1..10}@jaypalsingh回到awk字段:好消息!!