2つのファイルをIFS whileループに読み込んでいます - この場合、違いのない結果を得る方法はありますか?

2つのファイルをIFS whileループに読み込んでいます - この場合、違いのない結果を得る方法はありますか?

次の数百行のシーケンスを含むテキストファイルがあります。

    B29。
    B52。
    84頃。
    83頃。
    94頃。
    93頃。
    61程度。
    B38。
    81頃。
    92程度。
    28頃。
    c 37.
    27頃。

    lara@batcuter:~/.asd/a-new-way-of-stuying-go$ wc -l game7
    271話

次のスクリプトは、テキストファイルを2つのファイルに分割します。 1 つは奇数行、もう 1 つは偶数行で構成し、2 つのファイルを while IFS ループに読み込み、各ファイルに 1 行ずつ印刷します。

#/bin/bash
#testing liquor-where-twin-twas-born

awk '{print>"line-"NR%2}' $@

while IFS= read -r lineA && IFS= read -r lineB <&3; do
  echo "$lineA";
  echo "$lineB" 
done <line-1 3<line-0

残念ながら、あるファイルが他のファイルより1行長くなるため、与えられた内容は入力ファイルとまったく同じではありません。

    lara@batcuter:~/.asd/a-new-way-of-stuying-go$testing-liquor game7 > テスト
    lara@batcuter:~/.asd/a-new-way-of-stuying-go$ diff テストゲーム 7
    270a271
    >ロ7.

明らかにファイルの長さは271行なので、半分に分割すると2つのファイルになります。 1つは136行、もう1つは135行です。違いがゼロになるようにIFS whileループを変更する必要があります。最初は使い方が役に立つとread ... || read ...思いました。しかし実際には、これは他のすべての解決策が試したように出力を膨らませ、各項目間に複数の改行を挿入し、最後の行(ファイルから奇数行で終わる行)を削除します。

答え1

言うおすすめ||彼は愚かだ。を使用すると、||コードスニペットは最初にすべての行を読み、次にすべての行fileAを読みます。なぜなら、真が返されるfileB限り実行されないからです。代わりに、2回呼び出して戻り状態を保存してから戻り状態をテストしてください。read lineAread lineBread

while
    IFS= read -r lineA; statusA=$?
    IFS= read -r lineB; statusB=$?
    [ $statusA -eq 0 ] || [ $statusB -eq 0 ]
do …

ファイルが使い果たされたかどうかを知る必要がある場合は、$statusAループ内でテストを続行できます(行の内容は空ですが空白行と区別できません)。$statusB

関連情報