将重复值重定向到新文件

时间:2014-01-17 03:25:31

标签: linux bash shell

我有一个包含类似文件名的abc.log文件

  cat abc.log
  >
  a.arc
  a.arc 
  b.arc
  c.arc
  c.arc
  d.arc
  e.arc
  e.arc
  f.arc

我需要一个shell脚本来扫描abc.log文件并仅将重复值重定向到def.log

要求:

        cat def.log
        >
        a.arc
        c.arc
        e.arc                       
               /*only the duplicate values in abc.log*/

编辑:

   cat abc.log        /*may be unsorted too */
      >
       a.arc
       b.arc 
       c.arc
       a.arc
       c.arc
       e.arc
       e.arc
       d.arc

任何建议

提前致谢

2 个答案:

答案 0 :(得分:0)

使用uniq -d

uniq -d abc.log > def.log

请注意,在您的问题中,第二行中有一个尾随空格,但第一行中没有尾随空格,这使得uniq将它们视为不同。

对于未排序的输入:

sort abc.log | uniq -d > def.log

答案 1 :(得分:0)

@ timrau的回答比这更好:

awk '++seen[$0] == 2' in > out

这里唯一的优点是输入不需要排序。