Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash shell中文件一列中唯一字的计数_Bash_Shell_Awk - Fatal编程技术网

Bash shell中文件一列中唯一字的计数

Bash shell中文件一列中唯一字的计数,bash,shell,awk,Bash,Shell,Awk,我试图使用shell脚本从文件的一列中找出唯一单词的数量,以及单词本身。这就是我正在做的。输入文件包含(文件名:gnc.txt,城市名称后的新行): 作为第一步,我使用下面的shell命令找出了唯一名称的数量,即4 awk -F\, '{ if(!a[$2]) cnt++;a[$2]++;next}END{ print cnt }' gnc.txt 作为下一步,我想得到唯一的名字列表:即泰勒斯、萨姆、梅哈和约翰 有人能帮我修改上述命令吗?使用此awk: awk -F, '{c[$2]++} E

我试图使用shell脚本从文件的一列中找出唯一单词的数量,以及单词本身。这就是我正在做的。输入文件包含(文件名:gnc.txt,城市名称后的新行):

作为第一步,我使用下面的shell命令找出了唯一名称的数量,即4

awk -F\, '{ if(!a[$2]) cnt++;a[$2]++;next}END{ print cnt }' gnc.txt
作为下一步,我想得到唯一的名字列表:即泰勒斯、萨姆、梅哈和约翰

有人能帮我修改上述命令吗?

使用此awk:

awk -F, '{c[$2]++} END{for (i in c) print i, c[i]}' file
Tyrus 1
Sam 2
John 1
Meha 3

您也可以使用此选项:

cut -d',' -f2 file | sort | uniq -c
      1 John
      3 Meha
      2 Sam
      1 Tyrus

谢谢阿努巴瓦。那很快。你能解释一下吗。我试图找出,而不是正确地出现。<代码> C[ $ 2 ] ++<代码>首先声明一个数组,其中键为“代码> 2美元< /代码>,如果它不存在,然后将其值增加1。如果它对你有效,则考虑将答案标记为点击我的答案左上方的记号标记。谢谢解释。成功了。此外,如果$2退出,它会将其值增加1,但不会为其创建另一个空间。如果我错了,请纠正我。在您的脚本中,下一个
是多余的。如果只需要名称,请使用
END{print cnt;for(a中的名称)print name}
。如果需要名称及其出现次数,请使用:
END{print cnt;对于(a中的名称)print name,cnt[name]}
cut -d',' -f2 file | sort | uniq -c
      1 John
      3 Meha
      2 Sam
      1 Tyrus