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

时间:2017-07-28 08:40:20

标签: linux bash text merge

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

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  

任何帮助将不胜感激

4 个答案:

答案 0 :(得分:3)

您可以像这样使用end

awk

参考: Effective AWK Programming

答案 1 :(得分:1)

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

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

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

答案 2 :(得分: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

答案 3 :(得分:0)

我可能会毫不留情地无情地,但我相信这些任务更适合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