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

Linux下转换大TSV矩阵为行列索引-值格式的高效方法

Linux下高效转换TSV矩阵为长格式的方法

我有一个制表符分隔(TSV)的矩阵文本文件,示例如下:

a    b    c    d
a    0.1  0.5  0.3  0.0
b    0.9  0.2  0.4  0.7
c    0.2  0.0  0.6  0.5
d    0.0  0.5  0.3  0.1

希望将该矩阵转换为TSV格式,使其第一列为行索引,第二列为列索引,第三列为对应数值,例如前4行输出如下:

a    a    0.1
a    b    0.5
a    c    0.3
a    d    0.0

文件规模较大,是约5000×5000的矩阵,原文件包含约5000行和5000列,想了解Linux下更优的处理方法。

高效解决方案:使用awk命令

对于5000×5000级别的大矩阵,awk是理想的处理工具——它逐行处理数据,内存占用低,处理速度快,完全适配大文件场景。

直接执行以下命令即可完成转换:

awk 'BEGIN{FS=OFS="\t"} NR==1{for(i=1;i<=NF;i++) cols[i]=$i; next} {for(i=1;i<=NF;i++) print $1, cols[i], $i}' input.tsv > output.tsv

命令细节解释:

  • BEGIN{FS=OFS="\t"}:预先设置输入(FS)和输出(OFS)的分隔符为制表符,保证处理前后都是标准TSV格式。
  • NR==1{...; next}:专门处理第一行的列标题,把每个列名存入数组cols,然后跳过当前行,直接处理后续的数据行。
  • {for(i=1;i<=NF;i++) print $1, cols[i], $i}:遍历每一行的所有列,依次输出行索引(当前行第一列的值)、列索引(对应cols数组的列名)、矩阵中的对应数值,三者用制表符分隔。

核心优势:

  • 内存友好:不需要把整个5000×5000的矩阵加载到内存,逐行处理避免内存溢出风险。
  • 一步到位:无需拼接多个文本处理命令,一条命令完成所有转换逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:10:32