使用shell脚本将一个文件中的两个文件的内容合并

时间:2013-09-03 15:50:07

标签: linux shell unix

档案A:

1
3
5
7

档案B:

2
4
6
8

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

1
2
3
4
5
6
7
8  

5 个答案:

答案 0 :(得分:10)

使用paste按照找到的确切顺序交错行:

paste -d '\n' filea fileb

或使用sort对文件进行组合和排序:

sort filea fileb

答案 1 :(得分:4)

简单地:

sort -n FileA FileB > FileC

给出:

1
2
3
4
5
6
7
8

答案 2 :(得分:2)

$ 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。谢谢凯文

答案 3 :(得分:1)

既然你说你想要一个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

答案 4 :(得分:0)

如果要将第二个文件的内容附加在第一个文件的末尾。

cat file1.txt file2.txt > file3.txt