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

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

FILE NAME: /dir1/dir2/dir3/dir4/dir5/file
FILE NAME: /dirA/dirB/dirC/dirD/dirE/file

файл:

FILE NAME: /dir1/dir2/dir3/dir4/dir5/file
PARAMETER NAME: blablabla
TARGET FILE: 12
SOURCE FILE: 565
FILE NAME: /dir1/dir2/dir3/dir4/dir5/file
PARAMETER NAME: blablabla
TARGET FILE: 18
SOURCE FILE: 552
FILE NAME: /dir1/dir2/dir3/dir4/dir5/file
PARAMETER NAME: blablabla
TARGET FILE: 14
SOURCE FILE: 559
FILE NAME: /dirA/dirB/dirC/dirD/dirE/file
PARAMETER NAME: blablabla
TARGET FILE: 134
SOURCE FILE: 344
FILE NAME: /dirA/dirB/dirC/dirD/dirE/file
PARAMETER NAME: blablabla
TARGET FILE: 13
SOURCE FILE: 445
FILE NAME: /dirA/dirB/dirC/dirD/dirE/file
PARAMETER NAME: blablabla
TARGET FILE: 13
SOURCE FILE: 434

Ответы [ 3 ]

0 голосов
/ 15 июня 2010

В awk, к которому добавлен вопрос:

awk '$0  ~ /^FILE NAME: / { if (count++ == 0) print; }
     $0 !~ /^FILE NAME: / {                   print; }'

Вы, вероятно, можете сделать это с sed, но это не особо чисто.


Вопрос немного поясняется комментарием. Ответ удивительно похож, хотя важна разница:

awk '$0  ~ /^FILE NAME: / { if (count[$0]++ == 0) print; }
     $0 !~ /^FILE NAME: / {                       print; }'

Я все еще предполагаю, что вам нужны все остальные строки - в выходных данных примера показаны только строки «ИМЯ ФАЙЛА», но вопрос об удалении других строк ничего не говорит. Очевидно, что если вам не нужны другие строки, исключите вторую строку сценария awk.

0 голосов
/ 15 июня 2010

Вы можете использовать ассоциативный массив в AWK и, если строка содержит «ИМЯ ФАЙЛА», проверить, находится ли он в массиве. Если это так, не печатайте его. Если это не так, сохраните его в массиве и распечатайте. Для любых строк, которые не содержат «ИМЯ ФАЙЛА», напечатайте их.

0 голосов
/ 15 июня 2010

Если вы просто хотите, чтобы уникальные строки имени файла, такие как две строки, которые вы перечислили для примера, который вы показываете,

grep "^ FILE NAME" input.txt | сортировать | uniq


Обновление:
Я не уверен, что вы действительно хотите.
фильтр sort | uniq извлечет все уникальные имена путей через строки, начинающиеся с "^FILE NAME". Если ваш ввод и вывод сэмплов неверен, вы можете исправить это с помощью кнопки edit.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...