问题描述
我正在使用此脚本读取文件,并向我显示文件中的唯一名称,还向我显示该名称在文件中存在多少次(计数)
n==1
其输出:
n > 1
我想更改此格式,我想先输入姓名,然后再输入计数,我该如何使用上述脚本
john
john
William
wad
William
john
wad
john
wad
john
William
john
wad
john
wad
wad
john
john
cat student.txt | awk '{print $1}' | sort | uniq -c | sort -nr | head -n 10
解决方法
您的管道太长了。 Awk为此具有关联数组:
$ awk '{++count[$1]} END {for (name in count) print name,count[name]}' student.txt |
sort -nr -k 2
john 9
wad 6
William 3
,
附加到您的命令:
| awk '{print $2,$1}'
,
使用Perl: 该命令对每条输入行的出现次数进行计数,将输出从最频繁到最不频繁进行排序,并打印每行,其后是计数(制表符分隔):
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单行代码使用以下命令行标志:-e
:告诉Perl在代码中而不是在文件中查找代码。-n
:一次遍历输入一行,默认情况下将其分配给$_
。-l
:在直接执行代码之前,先剥离输入行分隔符(默认为* NIX上的"\n"
),并在打印时附加它。-a
:在空白或$_
选项中指定的正则表达式上,将@F
拆分为数组-F
。
print join "\t",reverse @F
:从右到左阅读:反转数组@F
(输入字段),将制表符上的元素连接成字符串,然后打印该字符串。
要将制表符替换为空白,请使用:print join " ",reverse @F