簡単な解決策は、すべての改行とパイプをタブに変えることです。少しクレイジーに聞こえますが、一見すると、あなたが望むもののように聞こえます。
perl -pwe 'tr/\n|/\t\t/' yourfile.txt
しかし、問題の説明と一致しないものがあります。あなたは言う:
行のペアを含むファイルがあります
つまり、ファイルは実際には次のようになります。
FIRST PIECE OF INFO
PIECE 2 | PIECE 3 | PIECE 4 | ...
SECOND PIECE OF INFO
PIECE 2a | PIECE 3b | PIECE 4b | ...
THIRD... etc
その場合、改行をやみくもに音訳すると、すべてが 1 行に表示されます。さて、これについての私の解釈は、あなたが望むのは次のようなものであるということです(タブと改行は文字通り示されています):
FIRST PIECE OF INFO\tPIECE 2\tPIECE 3\tPIECE 4 | ...\n
SECOND PIECE OF INFO\tPIECE 2a\tPIECE 3b\tPIECE 4b | ...\n
これは単純な音訳では達成できません。
perl -plwe 'next if !/\S/; $_ = join "\t", $_, split /\s*\|\s*/,<>;' file.txt
注: このnext if !/\S/;
ステートメントは、ファイルに奇数行が含まれている場合にストリームが最後に一時停止するのを防ぐためだけのものです。その場合、ファイル ハンドル<>
は STDIN から読み取ろうとするので、 を押しCtrl-D
て手動で停止する必要があります。
Data::Dumper
出力は次のようになり、空白文字が表示$Data::Dumper::Useqq = 1
されます。
$VAR1 = "FIRST PIECE OF INFO\tPIECE 2\tPIECE 3\tPIECE 4\t...\n";
$VAR1 = "SECOND PIECE OF INFO\tPIECE 2a\tPIECE 3b\tPIECE 4b\t...\n";
上記の出力のワンライナーは次のようになりますが、多少書き直されています。
perl -MData::Dumper -nlwe '
$Data::Dumper::Useqq=1;
next if !/\S/;
$_ = join "\t", $_, split /\s*\|\s*/,<>;
print Dumper $_;' file.txt