如何在不使用任何外部编程语言(awk等)的情况下打印bash中最常见的单词

如何在不使用任何外部编程语言(awk等)的情况下打印bash中最常见的单词,bash,shell,Bash,Shell,我想按降序打印文本文件中最常出现的单词,但我不能使用awk或sed,它必须是bash一行 我可以打印最常出现的单词/数字,但我只想打印单词而不是计数 sort inpt.txt | uniq -c | sort -nr | head -n 5 所以它给出了类似于 24 q 13 3 6 Y 4 g 3 N 不过我只是想 q 3 Y g N 你可以把不需要的部分剪掉 sort inpt.txt | uniq -c | sort -nr | head -n

我想按降序打印文本文件中最常出现的单词,但我不能使用
awk
sed
,它必须是bash一行

我可以打印最常出现的单词/数字,但我只想打印单词而不是计数

sort inpt.txt | uniq -c | sort -nr | head -n 5 
所以它给出了类似于

   24 q
   13 3
    6 Y
    4 g
    3 N
不过我只是想

q
3
Y
g
N

你可以把不需要的部分剪掉

sort inpt.txt | uniq -c | sort -nr | head -n 5 | cut -b7-
您可以使用
cut-c
根据输出中的列号提取文本:

sort inpt.txt | uniq -c | sort -nr | head -n 5 | cut -c 9-
在我的机器上输出你想要的


如果您的机器没有选择正确的列,您可能必须调整机器上的
9-
范围。

如果中间始终有一个空格,您可以使用cut:
sort inpt.txt | uniq-c | sort-nr | head-n5 | cut-d”“-f2
。|同时读取-r |w;执行printf'%s\n'${w};完成
?@michael当格式化为代码块时,它可能会丢失,但是
uniq-c
的输出包含可变数量的前导空格,使用
cut
bothersome@Aaron如果
uniq-c
的输出允许数字具有恒定的空间,则
cut-c9-
可以工作。在我的机器上,它是这样的:我总是有空间容纳7位数字,加上一个空格,所以单词从字符9开始。@Joan是对的,我只想到了
-f
。不过,我认为基于
read
的解决方案仍将更加健壮:我担心
uniq
使用的列数可能取决于实现/配置,并且可能随着计数大于9999999而变化