给出一个包含几行的文件,我打印了该文件的内容(按uniq -c file
),我想对该文件进行排序,然后,我只想接受这些行(不包含{{ 1}}),我该怎么做?
我尝试做uniq -c
,但输出为空。
我该如何解决?
是否存在一种方法来删除我从cat ${file} | uniq -c | sort -nr | cut -d" " -f2
获得的行的开头中的所有空格?
例如:
给出以下输入:
a
b
c
一个
一个
g
d
d
我从uniq -c
得到以下输出:
cat file | sort | uniq -c
(一开始我有空格)
答案 0 :(得分:2)
遵循awk
可能会对您有所帮助。
awk '{a[$0]++} END{for(i in a){print a[i],i | "sort -k2"}}' Input_file
解决方案2nd: :如果您希望输出顺序与输入顺序相同,而不是排序。
awk '!a[$0]++{b[++count]=$0} {c[$0]++} END{for(i=1;i<=count;i++){print c[b[i]],b[i]}}' Input_file
答案 1 :(得分:1)
使用(因为您在问题的开头使用了-f2)
cat file |sort |uniq -c | awk '{ print $2; }'
答案 2 :(得分:1)
为什么要使用额外的命令? sort
具有唯一的选项-u
您可以:
sort -u file
sort -u < file
例如:
$ cat > file
a
b
c
a
a
g
d
d
$ sort -u file
a
b
c
d
g
还可以查看计数的数字:
sort file | uniq -c | sed 's/^ \+//g'
sort file | uniq -c | grep -Po '\d+[^\n]+'
具有以下输出:
3 a
1 b
1 c
2 d
1 g
答案 3 :(得分:0)
您可以利用sed
去除前导空格和uniq -c
打印的数字
cat file | sort | uniq -c | sed 's/^ *[0-9]* //'
我将用一个例子来说明这一点。考虑一个文件
winebottles.mkv
winebottles.mov
winebottles.xges
winebottles.xges~
winebottles.mkv
winebottles.mov
winebottles.xges
winebottles.xges~
命令
cat file.txt | sort | uniq -c | sed 's/^ *[0-9]* //'
会返回
winebottles.mkv
winebottles.mov
winebottles.xges
winebottles.xges~