sorting在bash中

我一直试图在bash中的制表符分隔的文件的每一列中获得唯一的值。 所以,我用了下面的命令。

cut -f <column_number> <filename> | sort | uniq -c 

它工作正常,我可以得到一个列中的唯一值和它的数量

 105 Linux 55 MacOS 500 Windows 

我想要做的不是按列值名称(在这个例子中是操作系统名称)进行sorting,我想按countsorting它们,并且可能在这个输出格式的第二列中有计数。 所以它将看起来像:

 Windows 500 MacOS 105 Linux 55 

我该怎么做呢?

使用:

 cut -f <col_num> <filename> | sort | uniq -c | sort -r -k1 -n | awk '{print $2" "$1}' 

sort -r -k1 -n按照相反的顺序排序,使用第一个字段作为数字值。 awk简单地颠倒了列的顺序。 您可以测试添加的管道命令(使用更好的格式):

 pax> echo '105 Linux 55 MacOS 500 Windows' | sort -r -k1 -n | awk '{printf "%-10s %5d\n",$2,$1}' Windows 500 Linux 105 MacOS 55 

矿:

 cut -f <column_number> <filename> | sort | uniq -c | awk '{ print $2" "$1}' | sort 

这将改变列顺序(awk),然后对输出进行排序。

希望对你有帮助