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

awk交换字段时第三字段仅打印首个单词的原因及解决方法

问题原因
  • awk 默认输入字段分隔符FS是任意连续空白(空格、制表符都算分隔标记),你只设置了输出分隔符OFS为制表符,没指定输入分隔规则,导致第三列里的空格被当成了字段分割点,原本一整列的mitochondrial genome maintenance被拆成了三个独立字段:$3只存了第一个词mitochondrial,后面的genome和maintenance分别存在$4、$5里,你只打印$3当然拿不到完整内容。
解决方法

处理制表符分隔文件时,必须同时指定输入、输出分隔符为制表符,让awk严格按制表符切分字段,字段内部的空格会被当做普通文本保留,不会被拆分:

awk 'BEGIN{FS=OFS="\t"}{print $2,$1,$3}' file.txt

执行后输出完全符合预期:

Akt3    GO:0000002  mitochondrial genome maintenance
Mef2a   GO:0000002  mitochondrial genome maintenance
Mgme1   GO:0000002  mitochondrial genome maintenance
Mpv17   GO:0000002  mitochondrial genome maintenance
Mrpl15  GO:0000002  mitochondrial genome maintenance

如果你的文件后续列数不固定,只是要交换前两列、保留后面所有原始内容,可以用更通用的写法,不需要关心总共有多少字段:

awk 'BEGIN{FS=OFS="\t"}{tmp=$1; $1=$2; $2=tmp; print $0}' file.txt

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 07:36:31