AWK处理*分隔CSV文件做字段替换输出错位如何解决
awk 处理星号分隔CSV文件字段错位问题修复方案
问题根源
你代码中-F"*"的*是正则表达式特殊元字符,代表匹配前一个字符0次或多次,无法被识别为字面量的星号分隔符,导致字段分割完全错误,最终出现内容错位混乱。
修复方案
将字段分隔符的星号做字面量转义即可,以下是两种可行的正确写法:
写法1:转义星号分隔符
awk -F"\\*" 'FNR==NR{ map[$1]=$2; next } { if($12 in map) $12=map[$12]; print }' OFS="*" f1.csv f2.csv
写法2:字符类包裹星号(更稳妥,避免转义歧义)
awk -F'[*]' 'FNR==NR{ map[$1]=$2; next } $12 in map { $12 = map[$12] }1' OFS='*' f1.csv f2.csv
注:写法2末尾的
1是awk默认打印整行的简写语法,无论第12列是否匹配到映射关系,都会输出f2.csv的所有行,避免原写法漏输没有匹配到映射的行。
内容的提问来源于stack exchange,提问作者Carlos R.B
相关产品推荐
相关产品推荐

