在 Linux 中使用 bash 脚本合并两个文本文件



>我有两个文本文件。 第一个看起来像这样:

a  
b  
c  

另一个文件如下所示:

1 2   
3 4  

我想在 Linux 中使用 bash 脚本来合并这两个文件,以便第一个文件的每一行都放在第二个文件的所有行旁边,输出如下所示:

a 1 2    
a 3 4  
b 1 2  
b 3 4  
c 1 2  
c 3 4  

任何帮助将不胜感激

你可以像这样使用awk

awk 'NR==FNR{a[++n]=$0; next} {for (i in a) print $0, a[i]}' file2 file1
a 1 2
a 3 4
b 1 2
b 3 4
c 1 2
c 3 4

参考:有效的AWK编程

在纯 shell 中,您可以简单地执行以下操作:

#Usage: the_script FirstFile SecondFile
while read -r l1; do
while read -r l2 ; do
echo "$l1 $l2"
done <"$2"
done <"$1"

但是文件最好不要大,因为 shell 读取效率不高(它们对每个字节进行系统调用(。

再尝试一个awk,它将以与Input_file1相同的顺序给出输出。

awk 'FNR==NR{a[++i]=$0;next} {c[++k]=$0} END{for(q=1;q<=i;q++){for(u=1;u<=k;u++){print a[q],c[u]}}}'  Input_file1  Input_file2

我可能会被无情地否决,但我相信这类任务更适合PerlPython.
这是一个Python 2解决方案:

$ cat 1col.tmp
a
b
c
$ cat 2col.tmp
1 2
3 4
$ cat merge.py
with open("1col.tmp") as col1f:
for c1 in col1f.readlines():
with open("2col.tmp") as col2f:
for c2 in col2f.readlines():
print c1.strip(), c2.strip()
$ python merge.py
a 1 2
a 3 4
b 1 2
b 3 4
c 1 2
c 3 4

最新更新