我一直在尝试在bash中获取制表符分隔的文件的每一列中的唯一值。所以,我使用了以下命令。
cut -f <column_number> <filename> | sort | uniq -c
它工作正常,我可以得到列中的唯一值及其计数,如
105 Linux
55 MacOS
500 Windows
我想做的不是按列值名称(在本例中是操作系统名称)排序,而是按计数排序,并可能在此输出格式的第二列中显示计数。因此,它必须看起来像:
Windows 500
MacOS 105
Linux 55
我该怎么做?
3条答案
按热度按时间u4vypkhs1#
您可以使用(其中
N
是列号,F
是输入文件):最初的
sort/uniq
是以<count> <os>
的形式获取每个OS,以便管道的其余部分可以在其上工作。sort -nrk1,1
使用第一个字段(-k1,1
)按数字(n
)、逆序(r
)排序。然后,
awk
简单地反转列的顺序。您可以使用以下命令测试整个管道:这个测试文件格式在样式上与您自己的输入类似,包括分隔字段的选项卡。它不太可能是完全相同的格式,因此您需要根据自己的文件定制
cut
命令,以便它只提供所需的列。然而,你可能已经这样做了,因为这不是你要问的问题。
72qzrwbm2#
我的:
这将改变列顺序(awk),然后只对输出进行排序。
希望这对你有帮助
brgchamk3#
使用基于标记RE的sed:
但不会以整洁的格式生成输出。