数値を含む2つ以上のファイルを並べて比較

数値を含む2つ以上のファイルを並べて比較

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

これを試しましたが、sdiff2つのファイルでのみ機能します。

ベストアンサー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-

おすすめ記事