awk 调用 shell 命令,并传递参数

摘要:
awk调用外部命令并传递参数怎么样?awk中使用的shell命令有两种方法:一种。使用printcmd|“/bin/bash”root@ubuntu:~#awk'BEGIN{print“echo”,“abc”|“/bin/bash”}'abcroot@ubuntu :~# root@ubuntu:~#awk'BEGIN{print“echo”,“abc”,“;”,“echo”,“123”|“/bin/bash”}'abc123root@ubuntu:~#三。

from:awk 调用 shell 命令的两种方法:system 与 print

shell 向awk传递命令,这样使用即可: awk -v  ...  但反过来呢?awk调用外部命令,同时也传参呢? 

awk 中使用的 shell 命令,有 2 种方法:

一。使用所以 system()

awk 程序中我们可以使用 system() 函数去调用 shell 命令
如:awk 'BEGIN{system("echo abc")}' file
echo abc 就会做为 “命令行”,由 shell 来执行,所以我们会得到以下结果:


root@ubuntu:~# awk 'BEGIN{system("echo abc")}'
abc
root@ubuntu:~#


root@ubuntu:~# awk 'BEGIN{v1="echo";v2="abc";system(v1" "v2)}'
abc
root@ubuntu:~#


root@ubuntu:~# awk 'BEGIN{v1="echo";v2="abc";system(v1 v2)}'
/bin/sh: echoabc: command not found
root@ubuntu:~#


root@ubuntu:~# awk 'BEGIN{v1=echo;v2=abc;system(v1" "v2)}'
root@ubuntu:~#

从上面的例子,我们简单的分析一下 awk 是怎样调用 system 的:
如果 system()括号里面的参数没有加上双引号的话,awk 认为它是一个变量,它会从 awk 的变量里面把它们先置换为常量,然后再回传给 shell

如果 system()括号里面的参数有加上双引号的话,那么 awk 就直接把引号里面的内容回传给 shell,作为 shell 的 “命令行”



二。使用 print cmd | “/bin/bash”

root@ubuntu:~# awk 'BEGIN{print"echo","abc"|"/bin/bash"}'
abc
root@ubuntu:~#


root@ubuntu:~# awk 'BEGIN{print"echo","abc",";","echo","123"|"/bin/bash"}'
abc
123
root@ubuntu:~#


三。总结

无论使用 system()还是 print cmd | “/bin/bash”
awk 都是新开一个 shell,在相应的 cmdline 参数送回给 shell,所以要注意当前 shell 变量与新开 shell 变量问题

1.1
root@ubuntu:~# abc=12345567890
root@ubuntu:~# awk 'BEGIN{system("echo $abc")}'

root@ubuntu:~#


1.2
root@ubuntu:~# export abc=12345567890
root@ubuntu:~# awk 'BEGIN{system("echo $abc")}'
12345567890
root@ubuntu:~#

2.1
root@ubuntu:~# abc=1234567890
root@ubuntu:~# awk 'BEGIN{print"echo","$abc"|"/bin/bash"}'

root@ubuntu:~#


2.2
root@ubuntu:~# export abc=1234567890
root@ubuntu:~# awk 'BEGIN{print"echo","$abc"|"/bin/bash"}'
1234567890
root@ubuntu:~#


以上例子,没有 export 的话,那些变量都是只存在于当前 shell 变量中,所以都是 echo 不出来的 ,
而使用了 export 的都是环境变量,所以 awk 调用新的 shell 时候,可以 echo 出来。

免责声明:文章转载自《awk 调用 shell 命令,并传递参数》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇java进程占用CPU高的问题Java的Integer与int互转下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

教你阅读 Cpython 的源码(一)

目录 第一部分-介绍 Cpython 源代码中有什么?如何编译 Cpython 代码编译器能做什么?为什么 Cpython 是用 C 语言而是 Python 编写的?Python 语言的规范Cpython 中的内存管理机制结论 第二部分-Python 解释器进程 建立运行时配置读取文件/输入词法解析和句法解析抽象语法树结论 第三部分- Cpython 的编...

Win7 Python开发环境搭建

1、  下载Anaconda并安装   地址: https://www.anaconda.com/download/     Anaconda包括Python基础包与一系列科学计算包,安装后不用再单独安装Python。 2、  安装Pycharm   地址:https://www.jetbrains.com/pycharm/   Pycharm是Pytho...

Python引用模块和查找模块路径

模块间相互独立相互引用是任何一种编程语言的基础能力。对于“模块”这个词在各种编程语言中或许是不同的,但我们可以简单认为一个程序文件是一个模块,文件里包含了类或者方法的定义。对于编译型的语言,比如C#中的一个.cs文件,Java中的一个.java或者编译后的.class文件可以认为是一个模块(但常常不表述为模块);对于解释型的语言会更加直观些,比如PHP的....

Linux用户环境变量及操作

一、环境变量 用户登录Linux系统后,操作系统会自动配置好工作环境-语言、家目录、邮箱目录、命令搜索路径、终端类型、用户名、命令提示符等。用户的工作环境由一系列的环境变量定义。格式如下: 环境变量名=值 环境变量由大小写字母、数字、_、组成,一般大写。 常见的用户环境变量: LANG=zh_CN.UTF-8,语言定义为UTF-8 HOMS=/home/z...

bat 脚本常用命令

  1、echo命令     1. Echo :显示当前ECHO的状态:ECHO ON 或者ECHO OFF 。    2. ECHO ON :ECHO状态设为ON,将显示命令行(如每行前的C:>等类似标志)。    3. ECHO OFF:CHO状态设为OFF,将不显示命令行(如每行前的C:>等类似标志) 。    4. ECHO 字符串 :...

Django项目中关于redis包版本的坑

1.环境 python:3.6 django:1.11.8 redis:3.2.1 2.遇到的问题 报错:redis.exceptions.DataError: Invalid input of type: 'UserInfo'. Convert to a byte, string or number first. 3.原因 不指定安装版本时,pip i...