一尘不染

用bash排序

linux

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

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

它工作正常,我可以在列中获取唯一值,其计数如下

105 Linux
55  MacOS
500 Windows

我要执行的操作不是按列值名称(在此示例中为OS名称)进行排序,而是要按计数对它们进行排序,并可能以这种输出格式将计数放在第二列中。因此它必须看起来像:

Windows 500
MacOS   105
Linux   55

我该怎么做呢?


阅读 357

收藏
2020-06-07

共1个答案

一尘不染

采用:

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
2020-06-07