如何使用awk遍历逗号分隔的value2变量并输出所有值?
如何用awk从逗号分隔的变量中提取所有值?
问题场景
输入变量value2=aaaa,bbbb,cccc,dddd,需要提取其中每个逗号分隔的值并单独输出一行,现有awk代码无法实现该需求,期望输出:
aaaa bbbb cccc dddd
原代码问题分析
原代码中的for (i in value2//./)属于错误语法,awk不支持直接通过这种方式遍历字符串中的元素,必须先将字符串分割为数组再进行遍历。
解决方案
使用awk内置的split()函数,将逗号作为分隔符把value2分割为数组,再遍历数组输出每个元素。
独立测试代码
awk -v value2="aaaa,bbbb,cccc,dddd" ' BEGIN { # 分割字符串到数组arr,返回元素个数n n = split(value2, arr, ",") # 遍历数组输出每个元素 for (i = 1; i <= n; i++) { print arr[i] } }'
整合到原脚本的修改版本
awk -F '|' -v value1=".$1" -v value2="$2" ' { print "value1: " value1 print "value2: " value2 # 替换错误的循环逻辑 n = split(value2, arr, ",") for (i = 1; i <= n; i++) { print arr[i] } }'
说明
split(str, arr, sep):将字符串str按分隔符sep分割,结果存入数组arr,返回分割后的元素总数。- awk数组默认从索引1开始,因此遍历范围是
1到n。
内容的提问来源于stack exchange,提问作者IamGroot
相关产品推荐
相关产品推荐

