对awk稍微熟悉一点的朋友可能都知道, 在awk中使用system()函数可以调用系统命令, 比如:
echo "" | awk '{ system("touch hello.txt"); }', 就可以在当前目录新建一个hello.txt文件。 但是实际用的时候, 可能情况没这么简单, 比如说一些变量是在当前shell环境指定的, 一些变量是在当前的awk中生成的, 这个时候如果把awk中的变量输出到shell环境, 可能会麻烦些, 该怎么办呢?
其实如果在c语言中有用过system()函数的话, 都知道其实可以把命令先存在一个字符串里, 然后在作为参数传递给system(), 在awk中的用法是:
cmd=sprintf(fmt, variable);
system(cmd);
比如我要生成几个文件, 文件名的格式是:基本前缀_起始日期_结束日期_文件记录数.txt, 其中起始日期和结束日期在shell环境中定义的, 文件记录数在awk中计算得到, 脚本大致是这个样子:
DATE_BEGIN=$1
DATE_END=$2
awk '
{
if($2=="abc"){ abc++; print $1 > "abc.txt" }
else{ xyz++; print $1 > "xyz.txt" }
}
END
{
cmd=sprintf("mv abc.txt abc_%s_%s_%d.txt", "'${DATE_BEGIN}'", "'${DATE_END}'", abc );
system(cmd);
cmd=sprintf("mv xyz.txt xyz_%s_%s_%d.txt", "'${DATE_BEGIN}'", "'${DATE_END}'", xyz );
system(cmd);
}' ur_file
阅读(5053) | 评论(0) | 转发(0) |