更改 uniq -c 输出中的列顺序

Change the order of columns in the output of `uniq -c`

我正在使用这个脚本来读取文件并显示文件中的唯一名称,还显示该名称在文件中存在的次数(计数)

john
john
William
wad
William
john
wad
john
wad
john
William
john
wad
john
wad
wad
john
john

cat student.txt | awk '{print }' | sort | uniq -c | sort -nr | head -n 10

它的输出:

9 John
6 Wad
3 William

我想更改此格式,我想要第一个名称然后是计数,我如何使用上面的脚本执行此操作

 John 9
 Wad 6
 William 3

附加到您的命令:

| awk '{print ,}'

使用 Perl: 计算每个输入行出现次数的命令,将输出从最频繁到最不频繁排序,并打印每行后跟计数(tab-delimited):

echo William Wad John William John William William | xargs -n1 | \
    sort | uniq -c | sort -nr | \
    perl -lane 'print join "\t", reverse @F'

打印:

William 4
John    2
Wad     1

Perl one-liner 使用这些命令行标志:
-e :告诉 Perl 查找代码 in-line,而不是在文件中。
-n :一次循环输入一行,默认分配给 $_
-l : 在执行代码 in-line 之前去除输入行分隔符(默认情况下在 *NIX 上为 "\n"),并在打印时附加它。
-a : 在空格或 -F 选项中指定的正则表达式上将 $_ 拆分为数组 @F

print join "\t", reverse @F :从右到左阅读:反转数组 @F (输入字段),将选项卡上的元素连接成一个字符串,然后打印该字符串。

要用空白替换制表符,请使用:
print join " ", reverse @F

你的烟斗太长了。 awk 有用于此目的的关联数组:

$ awk '{++count[]} END {for (name in count) print name, count[name]}' student.txt |
sort -nr -k 2
john 9
wad 6
William 3