AWK脚本实现制表符分隔文件字段替换求助
嘿,这个问题我碰到过,很容易解决!你之前的代码只处理了前两个字段,没把后面的内容带上,而且还丢失了制表符分隔的格式,我来给你调整一下。
首先,AWK的优势就是可以直接修改字段值,然后输出整行。关键是要指定**输入字段分隔符(FS)和输出字段分隔符(OFS)**为制表符,这样处理后依然保持原文件的格式。
给你两种写法,一种是清晰的分支判断,另一种是更简洁的三元表达式:
方法一:清晰的分支判断
BEGIN { FS="\t"; OFS="\t" } { # 替换第二个字段 if ($2 == "M") { $2 = "Male" } else if ($2 == "F") { $2 = "Female" } # 输出整行,AWK会用OFS分隔所有字段 print $0 }
方法二:简洁的三元表达式
如果你喜欢更紧凑的代码,可以用三元运算符一行搞定替换逻辑:
BEGIN { FS="\t"; OFS="\t" } { $2 = ($2 == "M" ? "Male" : ($2 == "F" ? "Female" : $2)) print $0 }
为什么你的原代码不行?
你之前的print $1 "Male"是把$1和Male直接拼接成字符串,既没有保留制表符,也没有输出$3、$4及以后的字段。而修改$2后用print $0,AWK会自动用你设置的OFS(制表符)把所有字段连起来,完美保留原格式和剩余内容。
怎么运行?
把上面的代码保存为convert_gender.awk,然后运行:
awk -f convert_gender.awk Persons.txt
或者直接在命令行执行:
awk 'BEGIN { FS="\t"; OFS="\t" } { $2 = ($2 == "M" ? "Male" : ($2 == "F" ? "Female" : $2)); print $0 }' Persons.txt
这样输出的内容就完全符合你的预期啦!
内容的提问来源于stack exchange,提问作者Dhanabalan
相关产品推荐
相关产品推荐

