2

众所周知

uniq [options] [file1 [file2]]

它从已排序的 file1 中删除重复的相邻行。选项 -c 打印每一行一次,计算每一行的实例。因此,如果我们有以下结果:

     34 Operating System
    254 Data Structure
      5 Crypo
     21 C++
   1435 C Language
    589 Java 1.6

我们对上面的数据使用“sort -1knr”进行排序,结果如下:

   1435 C Language
    589 Java 1.6
    254 Data Structure
     34 Operating System
     21 C++
      5 Crypo

谁能帮我解决如何按此顺序仅输出书名(无编号)?

4

3 回答 3

2

您也可以使用sed它,如下所示:

uniq -c filename | sort -k -1nr | sed 's/[0-9]\+ \(.\+\)/\1/g'

测试:

echo "34 Data Structure" | sed 's/[0-9]\+ \(.\+\)/\1/g'
Data Structure

这也可以通过简化的正则表达式来完成(由 William Pursell 提供):

echo "34 Data Structure" | sed 's/[0-9]* *//'
Data Structure
于 2012-10-01T15:23:58.497 回答
2
uniq -c filename | sort -k 1nr | awk '{$1='';print}'
于 2012-10-01T14:45:58.383 回答
0

为什么你uniq -c要打印出现次数,然后你想用一些 cut/awk/sed 舞蹈来删除它?

相反,您可以只使用

sort -u $file1 $file2 /path/to/more_files_to_glob*

或者某些系统是否带有sort不支持的版本-u

于 2018-08-22T12:44:24.753 回答