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

Unix环境下使用awk/sed替换文件第6列非1/2值为-9的问题处理

错误原因

  • 手动拼接每个字段的写法容错性极低,当部分行第六列默认缺失(值为空)时,极易出现分隔符丢失的问题,你遇到的字段粘连就是手动拼接时的空格逻辑异常导致的。
  • 完全不需要手动拼所有字段,直接修改指定字段后打印整行即可,awk会自动用默认的空格作为输出分隔符拼接所有字段。

正确实现命令

直接运行以下命令即可得到符合要求的new.fam:

awk '{$6 = ($6 == 1 || $6 == 2) ? $6 : -9}1' old.fam > new.fam

命令解释

  1. 核心逻辑:对每一行的第六列做判断,如果值为1或2则保留原值,否则赋值为-9
  2. 末尾的1是awk的简写规则,等价于{print $0},即打印修改后的整行
  3. awk会自动处理输出字段的空格分隔,不管原行第六列是否存在,都会保证第五、第六列之间有空格分隔,不会出现粘连问题

如果偏好if else写法,修改为以下格式也可以正常运行:

awk '{ if ($6==1 || $6==2) {print $0} else {$6=-9; print $0} }' old.fam > new.fam

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 14:45:09