我一直试图在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),然后对输出进行排序。
希望对你有帮助