【问题标题】:combine two files line after line using cat使用 cat 逐行合并两个文件
【发布时间】:2014-08-07 17:55:23
【问题描述】:

我有两个文件:F1, F2 as

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 命令有什么建议吗?我搜索了类似的问题,但没有找到。

非常感谢。

【问题讨论】:

  • ..s 是文字行吗?
  • 不,只是有几行。感谢您的编辑

标签: shell unix cat


【解决方案1】:

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

paste -d '\n' F1 F2

【讨论】:

    【解决方案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
    

    【讨论】:

    • 感谢您的回答。 @1_CR 的一个班轮为我完成了这项工作:D
    • 此解决方案还涵盖可变行长,将来对我有用。
    猜你喜欢
    • 2016-07-30
    • 2013-10-03
    • 2021-05-11
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    相关资源
    最近更新 更多