awk执行外部命令或外部自定义函数返回的是一个状态码,如果要把外部命令的输出保存到awk的变量很不容易,经过一番研究终于搞定。
gawk 'BEGIN {FS=",";OFS=","} {"rand_str '$i'"|getline randStr;$2=$2"_"randStr;print $2;close("rand_str '$i'")}' $dumpFile
rand_str是shell中定义的一个产生随机字符串的函数,参数指定随机串的长度。awk的getline函数获取输出并保存到变量randStr,最后需要awk的close函数关闭命令产生的输出流,否则randStr的值会保持不变!
#!/bin/bash test(){ echo $RANDOM } export -f test echo -e "1\n2"|gawk 'BEGIN {FS=",";OFS=",";} {a="'"`test`"'";print a;}'
这样也可以实现,但是gawk处理每一行的时候a的值都是第一次的值,没有找到处理一行执行一次test()的方法。