Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 使用cat将两个文件逐行合并_Shell_Unix_Cat - Fatal编程技术网

Shell 使用cat将两个文件逐行合并

Shell 使用cat将两个文件逐行合并,shell,unix,cat,Shell,Unix,Cat,我有两个文件:F1,F2 as F1 F2 使用 cat F1 F2 > F3 给予 使用cat命令执行此操作有何建议?我搜索了类似的问题,但没有找到 非常感谢。这里是Bash的脚本。它可以处理多个文件(在最大打开文件限制内),而不仅仅是2个文件,并且可以处理可变长度的行 #!/bin/bash I=3 for F; do eval "exec $I< \"\$F\"" (( ++I )) done for (( ;; )); do LINES=()

我有两个文件:F1,F2 as

F1

F2

使用

cat F1 F2 > F3
给予

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


非常感谢。

这里是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
测试:

因此,我尝试将结果与粘贴进行比较:

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

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

paste -d '\n' F1 F2

的文字行吗?不是,只是有几行。谢谢你的编辑谢谢你的回答。@1_CR的一行代码为我完成了这项工作:d该解决方案还包括可变的行长度,将在未来对我有用。
f1row1  
f2row1  
f1row2  
f2row2  
..  
#!/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 -d '\n' <(seq 1 2) <(seq 1 3)
1
1
2
2

3
paste -d '\n' F1 F2