Unix 命令 "uniq" & "sort"



正如我们所知

uniq [options] [file1 [file2]]

它从排序的文件 1 中删除重复的相邻行。选项 -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

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

uniq -c filename | sort -k 1nr | awk '{$1='';print}'

您也可以为此使用 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

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

相反,你可以只使用

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

还是某些系统带有不支持-usort版本?

最新更新