我的测试文件中有以下数据结构:
"111","222","AAABBB","333","444","555"
我想转换第三个字段,所以在第三个 [AZ] 之后有一个“-”,如下所示:
"111","222","AAA-BBB","333","444","555"
使用 split() 函数是完成这项工作的最佳工具吗?这是我尝试过的:
awk 'BEGIN{OFS=FS=","} {split($3, a, "[A-Z]{3}", seps); print seps[1]"/"seps[2]};' test
上面的命令可以满足我的要求,但是如何打印包括更新后的 $3 字段在内的整行?结果:
AAA-BBB
简短的
awk
解决方案:[A-Z]{3}
- 正则表达式匹配 3 个大写字母&
- 代表正则表达式匹配的精确子字符串输出:
在
awk
中,当您重新分配字段变量的值时,$0
会重新计算 的值:所以在你的情况下:
您对所需逻辑的描述不是 100% 清楚,但以下 Sed 命令适用于您的示例输入: