両方のファイルを同時に読み取り、1行ずつ印刷する方法、bash? [コピー]

両方のファイルを同時に読み取り、1行ずつ印刷する方法、bash? [コピー]

F1とF2の2つのファイルをパラメータとして使用して、交互に印刷するスクリプトを作成したいと思います。まず、F1の第1行が記録され、F2'2の第2行が記録される。ある行が他の行より少ない場合は、短い行の印刷が終わると、スクリプトは最後まで最長の行を作成する必要があります。

私の意見は次のとおりです。

1)2つのパラメータがないことを確認 - >エコーして終了2)F1またはF2がファイルでないことを確認 - >エコーして終了3)テキスト:

exec 3 < $1
exec 4 < $2
i=0
j=1
while read -u 3 line && ((i==0))
do
echo line; echo
 ((i++))
((j--))
    while read -u 4 line && ((j==0))
    do
        echo line; echo
 ((j++))
((i--))
   done
 done
 exit $?

Q:これは、2つのファイルの行数が同じ場合にのみ機能します。このソリューションをさまざまなサイズのファイルに拡張するにはどうすればよいですか?

ベストアンサー1

シェルスクリプトは必要ありません。以下をpaste使用して直接これを実行できます。POSIXで指定:

paste -d '\n' file1 file2

ただし、説明した方法で他の行数を処理しません。引用仕様:

1つ以上の入力ファイル(すべての入力ファイルではない)でファイル終了条件が検出された場合、生地ファイルの終わりが検出されたファイルから空白行を読み取るかのように動作する必要があります。

個人的に、私はあなたの質問に記載されている行動をするのが間違っていると思います。出力の24行目を見ると、それがまたはから来たかどうかはfile1わかりませんfile2。実際の動作に基づいて出力の偶数行番号であるため、pasteそれが発生するかどうかがわかります。file2

tr -s '\n'次のように出力をパイプできます。

paste -d '\n' file1 file2 | tr -s '\n'

しかし、もしあれば実際両方のファイルに空白行があると、期待した結果が得られません。

おすすめ記事