首页 > 解决方案 > 使用 bash 读取两个文件的嵌套循环

问题描述

我目前正在尝试使用以下代码合并两个输入文件:

for i in `cat $file1`; do
    for j in `cat $file2`; do
        printf "%s %s\n" "$i" "$j"
    done
done

给定文件创建如下:

printf '%s\n' A B C >file1
printf '%s\n' 1 2 3 >file2

...我的预期/期望输出是:

A 1
B 2
C 3

但相反,我得到的输出是:

A 1
A 2
A 3
B 1
B 2
B 3
C 1
C 2
C 3

如何解决这个问题?

标签: bash

解决方案


可以使用 coreutils 的 pr 命令,也可以使用其他命令/工具,如 paste 以及 Shell 和 AWK 脚本。使用 coreutils 中的命令最省力,因为命令行上只需要几个参数,如下例所示:

pr -TmJS" " file1 file2

在哪里:

  • -T关闭分页
  • -mJ合并文件,加入整行
  • -S" "用空格分隔列

推荐阅读