使用 2 个 For 循环打印两个不同文件中 2 个答案的输出

使用 2 个 For 循环打印两个不同文件中 2 个答案的输出

我有 2 个包含一些内容/行的文件。

例子 :

cat a.txt
  1
  2
  3
  4

cat b.txt
  a
  b
  c
  d

需要使用 for 循环获得以下输出

 1 a
 2 b
 3 c
 4 d

我已经尝试过下面的脚本,但它给出了错误的输出

for i in `cat a.txt`
 do 
  for j in `cat b.txt`
   do 
     echo $i and $j
   done
 done

1 and a
1 and b
1 and c
1 and d
2 and a
2 and b
2 and c
2 and d
3 and a
3 and b
3 and c
3 and d
4 and a
4 and b
4 and c
4 and d

请帮我做 For 循环。提前致谢

答案1

正如@ilkkachu 评论的那样,paste这是最好的答案:

paste a.txt b.txt

或者,使用单个空格作为分隔符来代替制表符,

paste -d ' ' a.txt b.txt

对于仅 shell 的答案,首先不要读取行for为什么使用 shell 循环处理文本被认为是不好的做法?

您可以使用单个 while 循环同时读取 2 个文件中的行

while IFS= read -r lineA <&3; IFS= read -r lineB <&4; do
    echo "$lineA $lineB"
done 3<a.txt 4<b.txt

如果您喜欢更多空白以提高可读性:

while IFS= read -r lineA <&3
      IFS= read -r lineB <&4
do
    echo "$lineA $lineB"
done 3<a.txt 4<b.txt

另一种选择:将每个文件读入数组,然后迭代数组索引。

mapfile -t a < a.txt
mapfile -t b < b.txt
for idx in "${!a[@]}"; do printf '%s %s\n' "${a[idx]}" "${b[idx]}"; done

相关内容