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

如何将连续行的部分内容转换为另一部分连续行的列?

如何将文件中后半部分行与前半部分行配对成并列格式?

我有一个文件内容如下:

秩函数
原子排列
纯集合论与ZF公理系统
3.5
3.6
3.7

想要把最后三行和前三行一一对应,拼成同一行的两列,最终结果如下:

3.5 秩函数
3.6 原子排列
3.7 纯集合论与ZF公理系统

但文件的行数是不固定的(只要前后两半行数相等),我不确定正则表达式是不是可行的方案,有没有可靠的通用方法?


当然可以搞定!其实不用正则也能轻松解决,用命令行工具比如awk就特别适合这种行数对称的场景,而且不管行数是多少(只要前后两半数量一致)都能通用。

方法一:用awk实现通用处理

核心思路是先把前半部分的行存进数组,等读到后半部分时,把当前行和对应位置的前半行拼接输出。

假设你的文件名叫input.txt,直接运行这条命令就行:

awk -v total=$(wc -l < input.txt) '{if (NR <= total/2) arr[NR]=$0; else print $0, arr[NR - total/2]}' input.txt

简单解释下逻辑:

  1. wc -l < input.txt先算出文件的总行数,通过-v total=...把这个数值传给awk的变量total
  2. 当处理前半部分的行(行号NR小于等于总行数的一半)时,把每一行内容存入数组arr,下标用行号标记
  3. 处理后半部分的行时,用当前行号减去total/2,就能得到前半部分对应的行号,接着把当前行和数组里的对应内容拼接输出即可

方法二:编辑器正则替换(仅适合固定行数场景)

如果是在编辑器(比如VS Code、Vim)里手动处理,正则也能做到,但只适合行数固定的情况。以VS Code为例:

  1. 选中所有内容,打开查找替换面板,开启正则模式
  2. 查找模式(针对6行的情况):^(.+)$\n^(.+)$\n^(.+)$\n^(.+)$\n^(.+)$\n^(.+)$
  3. 替换模式:$4 $1\n$5 $2\n$6 $3

不过这种方法灵活性很差,行数一变就得修改正则,所以更推荐awk的方案,完全通用,不管是6行、10行还是100行,只要前后两半行数相等就能完美处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:41:49