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'
しかし、もしあれば実際両方のファイルに空白行があると、期待した結果が得られません。