AWK/GAWK 在模式匹配后添加字符

Gus*_*ler 2 awk gawk text-formatting

我的测试文件中有以下数据结构:

"111","222","AAABBB","333","444","555"
Run Code Online (Sandbox Code Playgroud)

我想转换第三个字段,以便在第三个 [AZ] 之后有一个“-”,如下所示:

"111","222","AAA-BBB","333","444","555"
Run Code Online (Sandbox Code Playgroud)

使用 split() 函数是完成这项工作的最佳工具吗?这是我尝试过的:

awk 'BEGIN{OFS=FS=","} {split($3, a, "[A-Z]{3}", seps); print seps[1]"/"seps[2]};' test
Run Code Online (Sandbox Code Playgroud)

上面的命令可以满足我的要求,但是如何打印包括更新后的 $3 字段在内的整行?结果:

AAA-BBB
Run Code Online (Sandbox Code Playgroud)

Rom*_*est 5

简短的awk解决方案:

awk 'BEGIN{ OFS=FS="," }{ sub(/[A-Z]{3}/, "&-", $3) }1' file
Run Code Online (Sandbox Code Playgroud)
  • [A-Z]{3} - 匹配 3 个大写字母的正则表达式模式
  • & - 代表正则表达式模式匹配的精确子字符串

输出:

"111","222","AAA-BBB","333","444","555"
Run Code Online (Sandbox Code Playgroud)