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

У меня есть следующий файл, как удалить sed все FILE NAME строки, кроме первой уникальной FILE NAME Например, необходимо удалить все FILE NAME строки из файла, кроме первой:

FILE NAME: /dir1/dir2/dir3/dir4/dir5/file

FILE NAME: /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

TARGETФАЙЛ: 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

1 Ответ

0 голосов
/ 23 января 2011
$line_count = 0;
open (OLD_FILE, "<$old_file") or die ("Could not open $old_file.");
open (NEW_FILE, ">$new_file") or die ("Could not open $new_file.");
while (<OLD_FILE>) {
    chomp ($_);
    if ($_ =~ /^FILE NAME/) {
        $line_count++;
        if ($line_count > 1) {
            next;
        }
    }
    print NEW_FILE "$_\n";
)
close (FILE);

Это соответствует шаблону в каждой строке нашего старого файла.Если строка начинается с «ИМЯ ФАЙЛА» и мы уже сопоставили это один раз, то она больше не печатает эти строки в наш новый файл.

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