2

我需要在一个循环中读取多个文件。我有一个带有 X 坐标的文件,一个带有 Y 坐标的文件和一个带有这些坐标上的字符的文件。

现在我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三次,每次都来自不同的文件描述符。

# 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

我不知道如何做到这一点paste,但你可以避免cut将所有变量分配到一个read

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