我一直试图在bash中的制表符分隔文件的每一列中获取唯一值。因此,我使用了以下命令。
cut -f <column_number> <filename> | sort | uniq -c
它工作正常,我可以在列中获取唯一值,其计数如下
105 Linux 55 MacOS 500 Windows
我要执行的操作不是按列值名称(在此示例中为OS名称)进行排序,而是要按计数对它们进行排序,并可能以这种输出格式将计数放在第二列中。因此它必须看起来像:
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简单地反转列的顺序。您可以这样测试添加的管道命令(格式更好):
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