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

如何用Unix/Linux命令将多行块按对应行合并为单块?

解决多行块对应行合并的问题

我明白你的需求了——你不是要把每个块内部的两行合并,而是要把所有块的第一行攒到一起,所有块的第二行攒到一起,对吧?之前用awk的思路没踩对点子,我给你几个实用的解决方案:

通用方案(适配任意块行数)

如果以后你的块行数可能变化(比如从2行改成3行),这个awk命令更灵活:

awk -v block_lines=2 '{
    # 计算当前行属于块中的第几行(从1开始)
    line_pos = (NR - 1) % block_lines + 1
    # 把当前行追加到对应位置的结果中,用空格分隔已有内容和新行
    result[line_pos] = result[line_pos] (result[line_pos] ? " " : "") $0
}
END {
    # 按顺序输出每一行的合并结果
    for (i=1; i<=block_lines; i++) {
        print result[i]
    }
}' 你的输入文件名.txt

原理说明

  • -v block_lines=2:通过变量指定每个块的行数,这里设为2,需要改的话直接修改这个数字即可
  • line_pos = (NR -1) % block_lines +1:用行号NR计算当前行在块内的位置,比如第1、3、5...行都会被归为块内第1行,第2、4、6...行归为块内第2行
  • 数组result用来分别存储每一行的合并内容,最后在END块里依次输出

简化方案(固定2行块)

如果你的块行数固定是2,也可以用更简洁的写法,不用额外变量:

awk '{
    if (NR % 2 == 1) {
        # 奇数行(每个块的第1行)追加到第一列
        col1 = col1 (col1 ? " " : "") $0
    } else {
        # 偶数行(每个块的第2行)追加到第二列
        col2 = col2 (col2 ? " " : "") $0
    }
}
END {
    print col1
    print col2
}' 你的输入文件名.txt

示例验证

比如你的输入文件内容是:

块1第1行
块1第2行
块2第1行
块2第2行
块3第1行
块3第2行

运行命令后会输出:

块1第1行 块2第1行 块3第1行
块1第2行 块2第2行 块3第2行

这样就完全符合你的需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:38:01