Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117559
  • 博文数量: 26
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 122
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-11 10:02
个人简介

分享是一种快乐!

文章分类

全部博文(26)

文章存档

2014年(11)

2013年(15)

我的朋友

分类: LINUX

2013-06-23 14:24:16

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