使用cat逐行合并两个文件

时间:2014-08-07 17:55:23

标签: shell unix cat

我有两个文件:F1,F2为

F1

f1row1  
f1row2  
..

F2

f2row1  
f2row2  
..

使用

cat F1 F2 > F3

给出

f1row1  
f1row2  
..  
<end of file1>
f2row1  
f2row2  
..  
<end of file2>

我想创建第三个文件:

F3

f1row1  
f2row1  
f1row2  
f2row2  
..  

使用 cat 命令执行此操作的任何建议?我搜索了类似的问题,但没有找到。

非常感谢。

2 个答案:

答案 0 :(得分:5)

如果您的输入文件包含相同数量的记录

paste -d '\n' F1 F2

答案 1 :(得分:2)

这是Bash的脚本。它可以使用多个文件(在最大打开文件限制内)而不仅仅是2,并且可以使用可变长度的行。

#!/bin/bash

I=3
for F; do
    eval "exec $I< \"\$F\""
    (( ++I ))
done

for (( ;; )); do
    LINES=()
    for (( J = 3; J < I; ++J )); do
        IFS= read -ru "$J" && LINES+=("$REPLY")
    done
    [[ ${#LINES[@]} -eq 0 ]] && break
    printf '%s\n' "${LINES[@]}"
done

用法:

bash script.sh file1 file2 ...

测试:

bash script.sh <(seq 1 2) <(seq 1 3) <(seq 1 4)

输出:

1
1
1
2
2
2
3
3
4

因此我很想将结果与paste进行比较:

paste -d '\n' <(seq 1 2) <(seq 1 3)

输出:

1
1
2
2

3