You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Shell内置命令、head、cat、tail和wc逐行合并两个文件?

当然可以!根据你的需求,我提供两种场景的实现方案,都只用到Shell内置命令、head、tail和wc:

场景1:每个数字单独占一行

假设你的文件内容是每行一个数字:

file1内容:
1
2
3

file2内容:
4
5
6

可以用以下脚本实现:

#!/bin/bash
# 获取文件行数(假设两个文件行数相同)
line_count=$(wc -l < file1)
merged_result=""

# 循环遍历每一行,交替提取两个文件的对应行内容
for ((i=1; i<=line_count; i++)); do
    # 提取file1的第i行
    f1_content=$(head -n "$i" file1 | tail -n 1)
    # 提取file2的第i行
    f2_content=$(head -n "$i" file2 | tail -n 1)
    # 拼接结果
    merged_result="$merged_result $f1_content $f2_content"
done

# 输出结果(去掉开头多余的空格)
echo "${merged_result# }"

脚本解释:

  • wc -l < file1:用wc统计file1的行数,因为我们假设两个文件行数一致。
  • head -n "$i" file1 | tail -n 1:通过head取前i行,再用tail取最后一行,以此获取第i行的内容,这是在没有sed或awk的情况下的替代方法。
  • 循环中把两个文件的对应行内容拼接到结果变量里,最后用${merged_result# }去除开头的空格,输出最终的1 4 2 5 3 6。

场景2:所有数字在同一行

如果你的文件是一行包含所有数字(比如file1是1 2 3,file2是4 5 6),可以用Shell内置的read命令拆分内容为数组,再交替拼接:

#!/bin/bash
# 读取file1的内容到数组arr1
read -ra arr1 < file1
# 读取file2的内容到数组arr2
read -ra arr2 < file2

merged_result=""
# 遍历数组索引,交替拼接元素
for ((i=0; i<${#arr1[@]}; i++)); do
    merged_result="$merged_result ${arr1[$i]} ${arr2[$i]}"
done

# 输出结果
echo "${merged_result# }"

脚本解释:

  • read -ra arr1 < file1:用内置的read命令,-r表示不转义反斜杠,-a表示把读取的内容按空格拆分成数组arr1。
  • ${#arr1[@]}获取数组的长度,循环遍历每个索引,交替取两个数组的元素拼接。
  • 最后输出拼接好的结果,同样去除开头的空格。

这两种方案都完全符合你要求的工具限制,你可以根据自己的实际文件格式选择对应的脚本~

内容的提问来源于stack exchange,提问作者AkaMirai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.01 02:57:28