【问题标题】:Nested loop for reading two files with bash [duplicate]用于使用 bash 读取两个文件的嵌套循环 [重复]
【发布时间】:2019-06-11 13:08:44
【问题描述】:

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

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


【解决方案1】:

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

pr -TmJS" " file1 file2

地点:

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

【讨论】:

  • How to Answer 中,请注意“回答正确提出的问题”部分,以及其中关于“之前已被多次询问和回答”的问题的要点。
【解决方案2】:

以下命令将起作用:

paste -d' ' file1 file2

paste coreutils 实用程序逐行合并文件。 -d 选项用于指定分隔符,即。这里有空格。

【讨论】:

  • 非常感谢!!!!有用 。你知道是否有任何替代方法可以通过循环获得相同的结果?
  • @KamilCuk, ...考虑一下关于回答明显重复发生的常见问题。
  • @elias,点击问题顶部的“这里已经有答案”链接;您会看到这个问题的许多现有实例都有类似 while IFS= read -r line1 <&3 && IFS= read -r line2 <&4; do echo "Read $line1 from file-1 and $line2 from file-2"; done 3<file1 4<file2 的建议作为答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
相关资源
最近更新 更多