【问题标题】:merge two text files using bash scripts in linux在linux中使用bash脚本合并两个文本文件
【发布时间】:2018-01-04 05:51:54
【问题描述】:

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

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  

任何帮助将不胜感激

【问题讨论】:

  • 到目前为止你有什么尝试?这似乎可以通过 2 个重叠的 while read 循环或 awk 脚本轻松完成

标签: linux bash text merge


【解决方案1】:

你可以像这样使用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

【讨论】:

    【解决方案2】:

    在纯 shell 中,您可以简单地这样做:

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

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

    【讨论】:

      【解决方案3】:

      再试一个 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
      

      【讨论】:

        【解决方案4】:

        我可能会被否决无情地,但我相信这类任务更适合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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-05-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-11-21
          相关资源
          最近更新 更多