Как правильно разобрать строки в моем текстовом файле, используя perl - PullRequest
1 голос
/ 07 апреля 2020

Я надеюсь проанализировать текстовый файл, который выглядит следующим образом:

A a, b, c
B e
C f, g

Формат, который я надеюсь получить:

A a
A b
A c
B e
C f
C g

Я попробовал это:

perl -ane '@s=split(/\,/, $F[1]); foreach $k (@s){print "$F[0] $k\n";}' txt.txt

но работает только тогда, когда после запятой нет пробела. В оригинальном файле после каждой запятой есть пробел. Что мне делать?

Ответы [ 2 ]

2 голосов
/ 07 апреля 2020
$ perl -lane 'print "$F[0] $_" for map { tr/,//rd } @F[1..$#F]' input.txt
A a
A b
A c
B e
C f
C g

Используйте режим автоматического разделения на пустое пространство, как обычно, и для каждого элемента среза массива из @F из второго поля в последнее удалите все запятые (я использовал tr//d, более обычный s///, конечно, тоже работает) и напечатайте его с первым полем в начале.

0 голосов
/ 08 апреля 2020

В качестве альтернативы, не используйте -a, потому что он слишком сильно разбивается.

perl -le'@F = split(" ", $_, 2); print "$F[0] $_" for split(/,\s*/, $F[1])'
...