【问题标题】:merging contents from two files in one file using shell script使用shell脚本将两个文件的内容合并到一个文件中
【发布时间】:2013-09-06 22:28:17
【问题描述】:

文件 A:

1
3
5
7

文件 B:

2
4
6
8

是否可以在 shell 脚本中使用文件 A 和文件 B 作为输入,并获得输出文件 C,其内容如下:

1
2
3
4
5
6
7
8  

【问题讨论】:

标签: linux shell unix


【解决方案1】:

如果你想在第一个文件的末尾追加第二个文件的内容。

cat file1.txt file2.txt > file3.txt 

【讨论】:

    【解决方案2】:

    既然你说你想要一个 shell 解决方案,

    #!/bin/bash
    
    if [ $# -ne 2 ] ; then
       echo 'usage: interleave filea fileb >out' >&2
       exit 1
    fi
    
    exec 3<"$1"
    exec 4<"$2"
    
    read -u 3 line_a
    ok_a=$?
    
    read -u 4 line_b
    ok_b=$?
    
    while [ $ok_a -eq 0 -a $ok_b -eq 0 ] ; do
       echo "$line_a"
       echo "$line_b"
    
       read -u 3 line_a
       ok_a=$?
    
       read -u 4 line_b
       ok_b=$?
    done
    
    if [ $ok_a -ne 0 -o $ok_b -ne 0 ] ; then
       echo 'Error: Inputs differ in length' >&2
       exit 1
    fi
    

    【讨论】:

      【解决方案3】:

      简单地说:

      sort -n FileA FileB > FileC
      

      给予:

      1
      2
      3
      4
      5
      6
      7
      8
      

      【讨论】:

      • 这并不总是有效..我的文件名按字母顺序排序并不能解决它..John Kugelman 的方法是万无一失的..
      • 与文件名无关
      • sort -n FileB FileA &gt; FileC 将给出相同的结果。尽管在其中粘贴 -u 也可能是个好主意。
      【解决方案4】:
      $ cat > filea
      1
      3
      5
      7
      $ cat > fileb
      2
      4
      6
      8 
      $ sort -m filea fileb
      1
      2
      3
      4
      5
      6
      7
      8
      $ 
      

      只是为了说清楚...在每个数字列表的末尾按 ctrl D 以设置 filea 和 fileb。谢谢凯文

      【讨论】:

      • 您的前两个命令将永远挂起。你应该摆脱重定向。
      • 凯文,当然可以。有一个看不见的 ctrl-D 发生了!
      【解决方案5】:

      使用paste 以找到它们的确切顺序交错行:

      paste -d '\n' filea fileb
      

      或者使用sort对文件进行合并排序:

      sort filea fileb
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多