sed или awk или perl + удалить все не uniq строки, кроме первой строки (ИМЯ ФАЙЛА) + сценарий оболочки - PullRequest
0 голосов
/ 15 июня 2010

У меня есть следующий файл Как удалить с помощью sed все строки ИМЯ ФАЙЛА, кроме первого uniq ИМЯ ФАЙЛА Например, необходимо удалить все строки ИМЯ ФАЙЛА из файла, кроме первой:

ИМЯ ФАЙЛА: / 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

ФАЙЛ ИСТОЧНИКА: 552

ИМЯ ФАЙЛА: / dir1 / dir2 / dir3 / dir4 / dir5 / file

НАИМЕНОВАНИЕ ПАРАМЕТРА: blablabla

ФАЙЛ ЦЕЛЯ: 14

ФАЙЛ ИСТОЧНИКА: 559

ФАЙЛИМЯ: / dirA / dirB / dirC / dirD / dirE / file

ИМЯ ПАРАМЕТРА: blablabla

ФАЙЛ ЦЕЛЯ: 134

ФАЙЛ ИСТОЧНИКА: 344

ИМЯ ФАЙЛА: / dirA / dirB / dirC / dirD / dirE / file

ИМЯ ПАРАМЕТРА: blablabla

ФАЙЛ ФАЙЛА: 13

ФАЙЛ ИСТОЧНИКА: 445

ИМЯ ФАЙЛА: / dirA / dirB / dirC / dirD / dirE / file

НАИМЕНОВАНИЕ ПАРАМЕТРА: blablabla

ФАЙЛ ЦЕЛЕВА: 13

ФАЙЛ ИСТОЧНИКА: 434

Ответы [ 2 ]

2 голосов
/ 15 июня 2010
awk '!(/^FILE NAME:/ && seen[$NF]++)' infile
0 голосов
/ 15 июня 2010

В 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 любит задачи, в которых вы можете обрабатывать каждую строку, основываясь только на содержимом этой строки (и, возможно, одну вещь, которую вы видели ранее и поместили в буфер удержания).Эта работа в основном включает в себя более сложную совокупность знаний, которую необходимо передать через файл.

...