我需要在一个循环中读取多个文件。我有一个带有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
中的每个循环中获得正确的值,同时加快速度?
答案 0 :(得分: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
。)
答案 1 :(得分:4)
我不确定如何在没有paste
的情况下执行此操作,但您可以避免cut
在一个read
中分配所有变量:
while read -r X Y CHAR; do
echo "X = $X; Y = $Y; CHAR = $CHAR";
done < "$file"