2017-07-28 228 views
1

我有两个文本文件。第一个是这样的:在linux中使用bash脚本合并两个文本文件

a 
b 
c 

另一个文件是这样的:

1 2 
3 4 

我要使用bash脚本在Linux中这两个文件合并,这样第一个文件的每一行会放在旁边的第二个文件和输出的所有行看起来是这样的:

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

任何帮助,将不胜感激

+0

你尝试过什么等等远吗?这看起来像是可以轻松地用2个“同时读取”循环或awk脚本完成的东西 – Aserre

回答

3

您可以使用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 

参考:Effective AWK Programming

+1

非常感谢您的善意帮助 – user3891747

1

在纯壳,你可以简单地做:

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

但这些文件最好不要大,因为shell读取效率不高(它们为每个字节创建一个系统调用)。

0

尝试一个更多的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 
0

我可能会被downvoted 无情,但我相信,这些类型的任务更适合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