【发布时间】: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
【问题讨论】:
文件 A:
1
3
5
7
文件 B:
2
4
6
8
是否可以在 shell 脚本中使用文件 A 和文件 B 作为输入,并获得输出文件 C,其内容如下:
1
2
3
4
5
6
7
8
【问题讨论】:
如果你想在第一个文件的末尾追加第二个文件的内容。
cat file1.txt file2.txt > file3.txt
【讨论】:
既然你说你想要一个 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
【讨论】:
简单地说:
sort -n FileA FileB > FileC
给予:
1
2
3
4
5
6
7
8
【讨论】:
sort -n FileB FileA > FileC 将给出相同的结果。尽管在其中粘贴 -u 也可能是个好主意。
$ 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。谢谢凯文
【讨论】:
使用paste 以找到它们的确切顺序交错行:
paste -d '\n' filea fileb
或者使用sort对文件进行合并排序:
sort filea fileb
【讨论】: