如何从“ uniq -c”的输出中剪切名称?

时间:2018-07-08 10:09:42

标签: bash

给出一个包含几行的文件,我打印了该文件的内容(按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

(一开始我有空格)

4 个答案:

答案 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~