sed或awk或perl +删除除第一行(FILE NAME)+ shell脚本之外的所有非uniq行

时间:2010-06-15 12:22:43

标签: sed

我有以下文件 除了第一个uniq FILE NAME之外,如何通过sed除去所有FILE NAME行 例如,需要从文件中删除除第一个之外的所有FILE NAME行:

文件名:/ dir1 / dir2 / dir3 / dir4 / dir5 / file

文件名:/ dirA / dirB / dirC / dirD / dirE / file

文件:

文件名:/ dir1 / dir2 / dir3 / dir4 / dir5 / file

参数名称:blablabla

目标文件:12

消息来源:565

文件名:/ dir1 / dir2 / dir3 / dir4 / dir5 / file

参数名称:blablabla

目标文件:18

SOURCE FILE:552

文件名:/ dir1 / dir2 / dir3 / dir4 / dir5 / file

参数名称:blablabla

目标文件:14

消息来源:559

文件名:/ dirA / dirB / dirC / dirD / dirE / file

参数名称:blablabla

目标文件:134

SOURCE FILE:344

文件名:/ dirA / dirB / dirC / dirD / dirE / file

参数名称:blablabla

目标文件:13

消息来源:445

文件名:/ dirA / dirB / dirC / dirD / dirE / file

参数名称:blablabla

目标文件:13

消息来源:434

2 个答案:

答案 0 :(得分:2)

awk '!(/^FILE NAME:/ && seen[$NF]++)' infile

答案 1 :(得分:0)

在python中:

import sys
seen = set()
for line in sys.stdin:
  if (line.startswith('FILE NAME: ')):
    if (line in seen):
      continue
    else:
      seen.add(line)
  sys.stdout.write(line)
sys.flush()

我会考虑sed并在几个小时内回复你,希望如此。

老实说,这不是一个非常繁琐的任务 - sed喜欢的任务只能根据该行的内容处理每一行(也许你之前见过的一件事并放入保持缓冲区) )。这项工作从根本上涉及需要通过文件传递的更复杂的知识体系。