如何使用AWK指定特定列执行修改?求长期解决方案
使用AWK指定列执行修改的解决方案
AWK通过$N(N为列号,从1开始)定位目标列,结合字符串替换函数就能精准修改指定列的内容。针对你给出的示例文件,以下是具体实现:
仅修改第1列
执行命令:
awk '{gsub(/_/, "\t", $1); print}' your_file.txt
原理:
gsub(/_/, "\t", $1):全局替换第1列($1)中的所有_为制表符\tprint:默认输出所有列,保持原列之间的空白分隔
输出结果示例:
id1 id2 toto tata tutu papa_pupu_popo tuta_totu_tatu popu_papo_pupa tuto_tuto_tata popo_papa_pupu
仅修改第2列
执行命令:
awk '{gsub(/_/, "\t", $2); print}' your_file.txt
只需将替换目标从$1改为$2即可,输出结果示例:
id1 id2 toto_tata_tutu papa pupu popopo tuta_totu_tatu popu papo pupa tuto_tuto_tata popo papa pupu
同时修改多列(如第1、2列)
如果需要批量处理多列,可循环遍历目标列:
awk '{for(i=1;i<=2;i++) gsub(/_/, "\t", $i); print}' your_file.txt
或者分开调用替换函数:
awk '{gsub(/_/, "\t", $1); gsub(/_/, "\t", $2); print}' your_file.txt
额外说明
- 若原文件列分隔符不是默认空白,用
-F指定输入分隔符,比如逗号分隔的文件:awk -F',' '{gsub(/_/, "\t", $1); print}' your_file.csv - 若要统一输出列的分隔符,用
-v OFS="分隔符"指定,比如输出用制表符分隔:awk -v OFS="\t" '{gsub(/_/, "\t", $1); print}' your_file.txt - 仅替换第一个匹配的
_,用sub替代gsub:sub(/_/, "\t", $1)
内容的提问来源于stack exchange,提问作者Caroline Juery
相关产品推荐
相关产品推荐

