打印独特的线条

Šim*_*óth 17 command-line text-processing

是否有比印刷的组合等独特的线条一些更好的解决方案sortuniq

Gil*_*il' 32

要以任何顺序仅打印每个相同的行:

sort -u
Run Code Online (Sandbox Code Playgroud)

以任何顺序仅打印唯一行:

sort | uniq -u
Run Code Online (Sandbox Code Playgroud)

只打印每行相同的行,按照它们第一次出现的顺序:(对于每一行,如果还没有看到就打印该行,然后在任何情况下增加看到的计数器)

awk '!seen[$0] {print}
     {++seen[$0]}'
Run Code Online (Sandbox Code Playgroud)

只打印唯一的行,按照它们第一次出现的顺序:(记录每一行seenlines如果它是第一次出现,也记录在;在输入的末尾,按出现的顺序打印行,但只打印那些只看到的行一次)

awk '!seen[$0]++ {lines[i++]=$0}
     END {for (i in lines) if (seen[lines[i]]==1) print lines[i]}'
Run Code Online (Sandbox Code Playgroud)

  • 或者更短的 `awk '!seen[$0]++'`,因为 `{print}` 是由一个空命令隐含的。 (12认同)
  • `awk '!seen[$0]++ {print}'` 怎么样? (10认同)
  • @克里斯`排序| uniq -u` 只打印唯一的行。换句话说,它删除了 _all_ 重复行的副本。相反,`sort -u` 或 `sort | uniq` 保留重复行的单个副本。 (2认同)