Unix环境下替换文本第7列0为1、1为2的简便方法咨询
解决方案
直接修改awk逻辑,仅针对第7列做替换,不需要额外加首行、修改其他列的操作:
通用写法(兼容第7列存在0/1以外其他值的场景)
awk '{$7 = $7 == 1 ? 2 : ($7 == 0 ? 1 : $7)}1' old.txt | column -t > new.txt
逻辑说明:
- 三元运算符判断第7列取值:是1则替换为2,是0则替换为1,其他值保持原样
- 末尾的
1是awk的固定简写,代表输出修改后的整行内容 - 不需要额外插入首行,无需后续手动删行、提取列的操作
如果需要保留原始文件的多空格分隔格式,不需要对齐输出,去掉column -t并指定输出分隔符即可:
awk '{$7 = $7 == 1 ? 2 : ($7 == 0 ? 1 : $7)}1' OFS=" " old.txt > new.txt
精简写法(仅适用于第7列只有0/1两种取值的场景)
因为需求刚好是0→1、1→2,等价于第7列值+1,可以直接简化为:
awk '{$7 += 1}1' old.txt | column -t > new.txt
内容的提问来源于stack exchange,提问作者Aryh
相关产品推荐
相关产品推荐

