Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1449026
  • 博文数量: 263
  • 博客积分: 10851
  • 博客等级: 上将
  • 技术积分: 2627
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-26 22:40
文章分类

全部博文(263)

文章存档

2013年(4)

2012年(25)

2011年(33)

2010年(50)

2009年(138)

2008年(13)

分类: LINUX

2009-10-12 16:14:36

对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
 
阅读(2979) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~