2つのファイルを一緒に貼り付けたいのですが、セクションの区切り線の後に垂直に配置されています::
。それは私の意味です。
コンテンツfile1
:
Apple
Banana
Carrot
::
Durian
コンテンツfile2
:
Energy
Flight
::
Gravity
Heartbreak
希望の出力:
Apple Energy
Banana Flight
Carrot
::
Durian Gravity
Heartbreak
これまで私はpaste
そうすることを知っていますほぼfile1
私がしたいことを行います(素敵な垂直位置合わせなし)。別のオプションは、合計を複数のファイルに分割し、結果を一緒にリンクすることですが、file2
可能であればこれを避けたいと思います。どうすればいいですか?
を使用する必要はありませんpaste
。働くことはすべてうまくいくでしょう!
ベストアンサー1
awkを使用してください。
$ cat tst.awk
BEGIN {
blockSep = "::"
}
FNR == 1 {
numBlocks[++fileNr] = 0
}
(FNR == 1) || ($0 == blockSep) {
numLines[fileNr,++numBlocks[fileNr]] = 0
}
$0 != blockSep {
vals[fileNr,numBlocks[fileNr],++numLines[fileNr,numBlocks[fileNr]]] = $0
}
END {
maxBlocks = ( numBlocks[1] > numBlocks[2] ? numBlocks[1] : numBlocks[2] )
for ( blockNr=1; blockNr<=maxBlocks; blockNr++ ) {
maxLines = ( numLines[1,blockNr] > numLines[2,blockNr] ? numLines[1,blockNr] : numLines[2,blockNr] )
for ( lineNr=1; lineNr<=maxLines; lineNr++ ) {
print vals[1,blockNr,lineNr], vals[2,blockNr,lineNr]
}
if ( blockNr < maxBlocks ) {
print blockSep
}
}
}
$ awk -f tst.awk file1 file2
Apple Energy
Banana Flight
Carrot
::
Durian Gravity
Heartbreak