gawk捕获外部命令输出到变量

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()的方法。