有没有一种方法可以使用Bash Shell逐行合并两个文件?

6
请看以下示例: 假设我有一个名为File1.txt的文件,其中有三行内容(a,b,c);File2也有3行(1,2,3)。
文件1
a
b
c

文件 2

1
2
3
...

我想要获取一个像以下这样的文件:
文件3
a1
a2
a3
b1
b2
b3
c1
c2
c3
...

许多感谢!

@CharlesDuffy paste 命令不会做到这一点。 - Barmar
@CharlesDuffy 这有点像join,只是没有任何要连接的内容。我不认为有任何可以产生完整交叉乘积的东西。 - Barmar
1
@CharlesDuffy 的 paste 只会输出 a1 b2 c3,而不是所有的组合。 - Barmar
2
看起来像是 join -j 2 file1 file2,即在不存在的字段上创建笛卡尔积。只需要从输出中删除空格即可。 - Benjamin W.
1
或者像这个答案一样。 - Benjamin W.
显示剩余2条评论
1个回答

1
假设使用的是bash 4.x版本:
#!/usr/bin/env bash
#              ^^^^-- NOT /bin/sh

readarray -t a <file1   # read each line of file1 into an element of the array "a"
readarray -t b <file2   # read each line of file2 into an element of the array "b"
for itemA in "${a[@]}"; do
  for itemB in "${b[@]}"; do
    printf '%s%s\n' "$itemA" "$itemB"
  done
done

在旧版本(4.0之前)的bash中,您可以使用以下替代方法来替换readarray -t a <file1readarray -t b <file2:
IFS=$'\n' read -r -d '' -a a < <(cat -- file1 && printf '\0')
IFS=$'\n' read -r -d '' -a b < <(cat -- file2 && printf '\0')

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