在一个while循环中从两个文件中读取行

9

我有一个文件, 名为 file1.csv, 包含以下内容:

This
is
some
text.

我正在使用while read line循环遍历每一行,例如:

while read line; do
    echo $line
done < file1.csv

我有另一个文件,名为file2.csv,与这个文件的行数相同:

A
B
C
D

每行数据对应第一个文件中相同行号的数据。

  • 我该如何修改while循环,以便它可以打印file2.csv中对应的行?
3个回答

15

使用另一个FD。

while read line; do
  if ! read -u 3 line2
  then
    break
  fi
  echo "$line***$line2"
done < file1.csv 3< file2.csv

10

你可以尝试使用 paste 实用工具:

$ cat one
this
is
some
text
$ cat two
1
2
3
4
$ while read a b ; do echo $a -- $b ; done < <(paste one two)
this -- 1
is -- 2
some -- 3
text -- 4

9
你可以使用paste命令:
$ paste -d, file{1,2}.csv | while IFS=, read x y; do echo "$x:$y"; done
This:A
is:B
some:C
text.:D

paste 中跳过 -d,在 while 中跳过 IFS=,。让空格成为您的分隔符。(如果您的数据中有空格,则无法正常工作...但是如果您的数据中有逗号,则上述解决方案也会出现问题,所以没有区别。) - Dan H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接