2

1 つのループで複数のファイルから読み取る必要があります。X座標を持つファイルが1つ、Y座標を持つファイルが1つ、それらの座標に文字を持つファイルが1つあります。

今のところpaste、これらのファイルをまとめてから、while ループで次のようcutに分離します。

paste x-file y-file char-file | while -r line; do
    Y=$(echo "$line" | cut -d\  -f1)
    X=$(echo "$line" | cut -d\  -f2)
    CHAR=$(echo "$line" | cut -d\  -f3)
done

しかし、これの問題は、それが本当に遅いことです(cut何度も何度も呼び出します)。

各ループで適切な値を取得するには$Y、どのようにすればよいですか?$X$CHAR

4

2 に答える 2

7

readそれぞれ異なるファイル記述子から 3 回呼び出すことができます。

# Use && to stop reading once the shortest file is consumed
while read -u 3 -r X &&
      read -u 4 -r Y &&
      read -u 5 -r CHAR; do
    ...
done 3< X.txt 4< Y.txt 5< CHAR.txt 

(-uは、bashわかりやすくするために使用される拡張です。POSIX 互換性のために、各呼び出しは のようになりますread -r X <&3。)

于 2013-05-20T12:19:11.700 に答える
4

なしでそれを行う方法はわかりませんが、すべての変数を 1 つに割り当てるpasteことを避けることができます。cutread

while read -r X Y CHAR; do
    echo "X = $X; Y = $Y; CHAR = $CHAR";
done < "$file"
于 2013-05-20T07:49:35.873 に答える