如何用awk在第2-5列精准匹配替换字符串(Bash脚本)
解决方案:用awk批量修改指定列的精准匹配字符串
这事儿用awk完全能搞定,写法还挺简洁,直接给你能跑的bash脚本:
awk '{ # 循环遍历第2到第5列 for (i=2; i<=5; i++) { # 仅当列内容精准匹配Old_word时替换 if ($i == "Old_word") { $i = "New_word" } } # 输出修改后的整行 print $0 }' your_input_file.txt > output_file.txt
代码细节解释:
for (i=2; i<=5; i++):精准锁定要处理的列范围,完全避开第1列,符合你的需求。if ($i == "Old_word"):这里是严格相等匹配,只有当整列内容和Old_word完全一致时才会触发替换,不会出现模糊匹配的情况。print $0:输出修改后的整行,保证原文件的列格式(默认用空白符分隔)完全保留。
适配非空白分隔的文件(比如CSV):
如果你的文本是逗号、制表符这类特定分隔符,只需要在awk开头指定分隔符参数即可,比如处理逗号分隔的CSV文件:
awk -F',' -v OFS=',' '{ for (i=2; i<=5; i++) { if ($i == "Old_word") { $i = "New_word" } } print $0 }' your_input_file.csv > output_file.csv
这样处理后,第1列哪怕出现Old_word也会原封不动,只有2-5列的精准匹配项会被替换成新字符串。
内容的提问来源于stack exchange,提问作者Nike
相关产品推荐
相关产品推荐

