Shell 使用cat将两个文件逐行合并
我有两个文件:F1,F2 as F1 F2 使用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=()
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