关闭

awk内部调用shell命令 -- shell

4635人阅读 评论(0) 收藏 举报
分类:

在awk中可以直接执行shell命令。

[plain] view plaincopy
  1. zoer@ubuntu:~$ touch a  
  2. zoer@ubuntu:~$ touch b  
  3. zoer@ubuntu:~$ cat a.txt   
  4. a  
  5. b  
  6. zoer@ubuntu:~$ awk '{cmd="rm "$0;system(cmd)}' a.txt   
  7. zoer@ubuntu:~$ ls  
  8. a.txt      dd            important    mysql                py       testdata  
  9. daemon.py  Desktop       installer    mysql_install_db.sh  stu  
  10. data       dfadsfadfadf  jdk1.6.0_33  Public               stu.txt  
  11. zoer@ubuntu:~$   

我们在awk中组装命令并且最后使用system()来执行。每次读入一个文件名并删除这个文件。

----------------------------------------

下面我们使用awk中执行命令来创建一些文件。

[plain] view plaincopy
  1. zoer@ubuntu:~$ awk 'BEGIN{count=10;i=0;while(i<count){cmd="touch "i".txt";i++;system(cmd)}}'  
  2. zoer@ubuntu:~$ ls  
  3. 0.txt  4.txt  8.txt      dd         jdk1.6.0_33          py  
  4. 1.txt  5.txt  9.txt      Desktop    mysql                stu  
  5. 2.txt  6.txt  daemon.py  important  mysql_install_db.sh  stu.txt  
  6. 3.txt  7.txt  data       installer  Public               testdata  

 补充效率问题:

在对squid进行目录刷新的时候,一般使用的脚本都是采用for i in squidclient mgr:objects|grep $1|awk '{print $2}';do squidclient -m purge “$i”;done的方式。

mgr:objects本来就是一个比较费资源的请求,假如一个200G的cache,这个$i变量该卡多久才能有反应?抑或直接挂掉……

于是把这个稍微改进一下,变成squidclient mgr:objects awk ‘/”‘$1’”/{system(“squidclient -m purge “$2)}’,因为awk对每行进行匹配后,就可以同时作出反应,所以比存一个大变量要好一些。

不过在使用中发现还有一些别的问题。比如碰到http://www.test.com/abc(123).html这样的url的时候,就会出错:

sh: -c: line 0: syntax error near unexpected token `(‘

url里的括号和awk函数的括号冲突了。所以对$2不能简单引用就完,还得处理。 CU上有人给出如下写法:

awk ‘{system(“squidclient -m purge ‘’’“$2”’’’”)}’

一试果然可以,试着分解一下这堆引号:

‘{system(“squidclient -m purge ‘第一部分,单引号表示里面的内容都传递给awk处理;

‘第二部分,shell环境下转义单引号为普通字符;

’“$2”‘第三部分,传递给awk,其中第一个”接第一部分的”,完成system函数的命令部分,其中包括了第二部分的普通字符’;

‘第四部分,shell环境下转义单引号为普通字符;

’”)}’第五部分,传递给awk,其中”接第三部分的第二个”,其中包含了第四部分的普通字符’;

合在一起,就给替换好的$2加上了一对’‘,然后通过system函数传递给shell执行。OK~~

getline:

先把文件列表存在filename文件中

awk '{system("rm $0")}' filename -------WRONG

因为对于 system来说 $0 不再是某行全部的内容,而是 “sh” , 上面的命令相当于执行“ sh rm sh”

然后

awk '{cmd="rm "$0;system(cmd)}' filename ----OK

下面的也ok

awk '{cmd="rm "$0;cmd|getline }' filename  ---- OK

man awk里面关于getline的说明,大意是说 运行command,同时会把输出存在$0 里面,或参数var中。


       command | getline [var]
                             Run command piping the output either into $0 or var, as above.

       command |& getline [var]
                             Run command as a co-process piping the output either into $0  or  var,  as  above.
                             Co-processes are a gawk extension.



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

awk里面执行shell命令

先把文件列表存在filename文件中 先 awk '{system("rm $0")}' filename -------WRONG 因为对于 system来说 $0 不再是某...
  • cws1214
  • cws1214
  • 2014-03-24 15:16
  • 12759

awk中可以使用system来执行复杂的shell命令

在awk中可以直接执行shell命令。 zoer@ubuntu:~$ touch a zoer@ubuntu:~$ touch b zoer@ubuntu:~$ cat a.txt a b zoe...
  • imzoer
  • imzoer
  • 2013-03-31 13:14
  • 8033

awk使用shell变量及shell使用awk中的变量

在写shell脚本时,经常会使用到awk程序。但是有些复杂的逻辑,可能需要在awk中使用在shell中定义的变量,而且awk程序处理之后,产生的中间变量,还需要在shell中继续处理。 一、那如何...
  • rj042
  • rj042
  • 2017-06-04 18:03
  • 2070

11 shell文本处理利器awk命令

11.1  awk入门 awk是一种非常强大的数据处理工具,其本身可以称为是一种程序设计语言,因而具有其他程序设计语言所共同拥有的一些特征,例如变量、函数以及表达式等。通过awk,用户可以编写一些非...
  • halazi100
  • halazi100
  • 2015-03-13 14:41
  • 707

shell学习四十天----awk的惊人表现

awk的惊人表现 awk可以胜任几乎所有的文本处理工作。     awk 调用 1.调用awk: 方式一:命令行方式 awk [-F field-separator ] ‘comman...
  • shanyongxu
  • shanyongxu
  • 2015-07-08 16:38
  • 6631

awk与shell效率比较

需求:对比2个文件,找出仅存在文件A中的行 方法1: cat fileA | while read line do get=cat fileB|grep $line if...
  • taotao193051
  • taotao193051
  • 2016-10-25 14:26
  • 626

Linux Shell脚本编程--awk命令详解

简单使用: awk :对于文件中一行行的独处来执行操作 。 awk -F :'{print $1,$4}'   :使用‘:’来分割这一行,把这一行的第一第四个域打印出来 。     详细介绍: AW...
  • xifeijian
  • xifeijian
  • 2013-08-02 22:42
  • 31435

awk命令基本处理 -- shell

awk 逐行扫描输入 ( 可以是文件或管道等 ) awk 将读入的记录分割成数个字段: 1、$0 表示整条记录,第一个字段放入发量 $1 中,第二个放入发量 $2 中。 2、字段...
  • ccy365263452
  • ccy365263452
  • 2014-12-13 11:09
  • 1232

shell函数和awk函数总结

shell 函数、awk函数、以及awk调用shell中的函数,下面统一总结一下。昨晚写脚本函数,然后就把函数在shell中的各种使用方法都实验了一篇,下面直接贴代码吧。 1、 普通shell函数:...
  • xiaolang85
  • xiaolang85
  • 2013-01-27 18:19
  • 1336

awk调用shell函数

[work@ shell_test]$ more conf_func_test.sh #!/bin/sh   function method_add {         if [ $# -...
  • yangkaiwxy
  • yangkaiwxy
  • 2012-03-14 18:43
  • 1737
    个人资料
    • 访问:450390次
    • 积分:5465
    • 等级:
    • 排名:第5694名
    • 原创:170篇
    • 转载:193篇
    • 译文:0篇
    • 评论:6条
    最新评论