perl -alF\\n -00ne '
push @{ $A[$_] }, $F[$_] for 0 .. $#F; END{
print join "\t", @$_ for @A;}
' yourfile.txt
Опции Perl
-a
Для каждой прочитанной записи она будет автоматически разделять запись по разделителю полей, указанному в опции -F
и сохраните поля в массиве @F
.
-l
Наборы ORS = RS = "\n"
-F\\n
Наборы FS = "\n"
-00
Наборы RS = "\0"
означает, включить режим абзаца
. Обратите внимание, что он отменяет RS
из предыдущей настройки с помощью -l
.
-n
Устанавливает неявное чтение файла в цикле + не печатать, если об этом не попросят.
-e
Применить данный код Perl
к каждой записи из входного файла.
Рабочий
@A
представляет собой список-списков
, также известный как LoL
, в котором мы храним соответствующие строки из каждой записи. Итак, первые строки каждой записи хранятся в $A[0], вторые строки из каждой записи помещаются в $A[1], ...
Затем, когда исчерпано чтение всех записей из файла, мы просто распечатайте массив, элементами которого являются LoL
, соответствующим образом соединенные TAB
.
HEADER1 HEADER2 HEADER3 HEADER4
item1 item1 item1 item1
item2 item2 item2 item2