Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3032917
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-06-09 16:22:31

    在awk中的systme()非常的有用,它能直接在awk中执行shell命令,我们看个例子:
  1. $ ls *.sh
  2. 123.sh
  3. $ ls *.sh | awk -F'.' '{system("mv "$0" 321."$2)}'
  4. $ ls *.sh
  5. 321.sh
这样就把123.sh文件更名成了321.sh。在命令中大家注意所有的$i变量都是没有双引号的,能不能把命令形成一个整体呢?答案是可以的。
  1. $ ls *.sh | awk -F'.' '{system("mv "$0" 321"FS""$2"")}'

仔细看清楚了吗?在systme()函数中如果要形成一个整体命令,那么在双引号内引用变量的话需要再次把awk的变量加双引号标注,否则会被认为是字符处理,而不是变量。

 

   对于变量本来就需要加注双引号的又该怎么处理?我们再看看这个问题,比如 date +%F -d "-4 day" 这个命令,我们从文件中读取行是"-4 day:ABC",以冒号为分割的第一个字段为-d的参数,并且这个参数本来就需要双引号加注,如何操作呢?

  1. $ echo "-4 day:ABC" | awk -F':' '{system("date +%F -d \""$1"\"")}'
  2. 2011-06-05

看明白了吗?第一个对双引号是\转义,表明是真正双引号的符号,里面那对是引用的awk变量。

 

传统的处理手法也可以这样来操作:

  1. $ echo "-4 day:ABC" | awk -F':' '{print "date +%F -d \""$1"\"" | "sh"}'
  2. 2011-06-05

打印出命令传递给shell处理。

    还有个疑问,"$i" 这只是引用awk的内置变量,那要是直接可以引用shell中的变量吗?答案是可以的我们再看看下面的命令:

  1. $ A="-4 day"
  2. $ echo $A
  3. -4 day
  4. $ awk 'BEGIN{system("date +%F -d \"'"$A"'\"")}'
  5. 2011-06-05

[解析]

  其实就是在 "$A" 的外面再加对单引号就能引用shell中的变量了。

阅读(2217) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~