【问题标题】:Read from two files line by line and process them simultaneously逐行读取两个文件并同时处理
【发布时间】:2021-02-14 09:58:36
【问题描述】:

大家好,我是这个游戏的新手,所以我的问题可能很简单,但我被困了很长时间。我想逐行同时处理两个文件列表中的两个文件。

我目前正在尝试:

 read file1 && read file2; 
    do 
    echo "$file1 and $file2"
    done 

echo 当然只是脚本其余部分的占位符,但我没有设法从读取操作中获取任何变量。

【问题讨论】:

标签: bash


【解决方案1】:
LINECOUNTER=1
while true; do
    FILE1INPUT="$(sed -n "${LINECOUNTER}p" file1.txt)"
    FILE2INPUT="$(sed -n "${LINECOUNTER}p" file2.txt)"
    echo "$FILE1INPUT and $FILE1INPUT"
    let LINECOUNTER=LINECOUNTER+1
done
  • LINECOUNTER 变量只是为了记住接下来要输出哪一行。
  • 然后将 sed 命令$(sed ...) 的输出分配给 变量 FILE1INPUT。这个 sed 命令只读取一行,指定 通过 file1.txt 中的 LINECOUNTER。与 file2.txt 相同
  • 然后 LINECOUNTER 加一,这样下一次 sed 就是 执行后返回下一行。

当然需要一个适当的条件来结束while循环。

【讨论】:

  • 没有理由对每个文件的每一行都运行sed
【解决方案2】:

您需要两个单独的文件描述符来一次读取两个文件。其中之一可以是标准输入。

while IFS= read -r line1 && IFS= read -r line2 <&3; do
  echo "File 1: $line1"
  echo "File 2: $line2"
done < file1 3< file2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-02
    • 1970-01-01
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多