1行に1つずつソートされた数値シーケンスを含む3つのファイルがあります。
ファイル1
1
2
3
ファイル2
1
3
4
ファイル3
1
5
次のように、これら3つのファイルを並べて「ソート」したいと思います。
file1 file2 file3
1 1 1
2
3 3
4
5
これを試しましたが、sdiff
2つのファイルでのみ機能します。
ベストアンサー1
X
各ファイルを処理し、シーケンス1-の欠落している各数字などの特定の文字を含む行を印刷できます。最高(どこ最高ファイルの最後の数字)、paste
結果はその文字をスペースで置き換えます。
paste \
<(awk 'BEGIN{n=1};{while (n<$1) {print "X";n++}};{n=$1+1};1' file1) \
<(awk 'BEGIN{n=1};{while (n<$1) {print "X";n++}};{n=$1+1};1' file2) \
<(awk 'BEGIN{n=1};{while (n<$1) {print "X";n++}};{n=$1+1};1' file3) \
| tr X ' '
すべてのファイルに値がない場合、出力に空白行が表示されます(実際には空ではなく空白のみが含まれています)。
これを削除するには、次のようtr X ' '
にsed '/[[:digit:]]/!d;s/X/ /g'
置き換えます。また、ヘッダーが必要な場合は、常に次のように最初に実行できます。
printf '\t%s' file1 file2 file3 | cut -c2-