awk内置变量之FILENAME、ARGC、ARGV、ENVIRON

35 篇文章 0 订阅

本篇文章主要简述以下内置变量:


ARGC number of command line arguments.
ARGV array of command line arguments, 0..ARGC-1.
ENVIRON array indexed by environment variables. An environment string, var=value is stored as ENVIRON[var] = value.
FILENAME name of the current input file.

1. FILENAME

FILENAME name of the current input file.

表示当前处理的文件的文件名,例如要打印当前目录下所有*.txt文件的文件名和第一行内容:
qingsong@db2a:~$ awk ' FNR == 1 {print FILENAME, ":" , $0}' *.txt
1.txt : BEGIN {
ipa.txt : inet addr:172.17.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
ipb.txt : Beth 4.00 0
ipc.txt : hello, world
ipd.txt : if (a > b);return a;else;return b
log.txt : Hello, world, TableId = 19039 jl
rand.txt : 150XcJQw9zW0fQZuxhOK35E5yYuXVkls1A==
seq2.txt : 1
seq3.txt : 1,101

2. ARGC和ARGV

ARGC number of command line arguments.
ARGV array of command line arguments, 0..ARGC-1.

ARGC表示awk命令参数的个数,ARGV是一个数组,每个元素存放了一个参数。
例如有一条命令:
awk -f progfile a v=1 b,
那么它一共有4个参数,ARGC为4,ARGV[0]为awk, ARGV[1]为a,ARGV[2]为v=1,ARGV[3]为b。ARGC总是比awk命令的实际的参数多1,因为awk本身就是一个参数(这一点和C语言类似)

例1:打印所有输入的参数,每个一行
qingsong@db2a:~$ awk '
>   BEGIN {
>   for (i = 1; i < ARGC; i++)
>    print ARGV[i]
>   }' aa b=1 1234 hello,world
aa
b=1
1234
hello,world

例2:模拟echo程序
qingsong@db2a:~$ cat echo.awk
BEGIN {
 for (i = 1; i < ARGC; i++)
  printf("%s ", ARGV[i])
 printf "\n"
}
qingsong@db2a:~$ awk -f echo.awk hello,world simulating echo!
hello,world simulating echo!

3. ENVIRON

ENVIRON array indexed by environment variables. An environment string, var=value is stored as ENVIRON[var] = value.

ENVIRON数组,里面存放的是系统环境变量,它的下标是环境变量的名,元素是对应环境变量的值,例如可以使用下面的方法打印系统的环境变量
qingsong@db2a:~$ awk '
> BEGIN {
> OFS = "="
> for (x in ENVIRON)
>    print x, ENVIRON[x]
> }'
SSH_CLIENT=192.168.16.1 60278 22
HOME=/home/qingsong
TERM=vt100
LESSOPEN=| /usr/bin/lesspipe %s
LANGUAGE=en_US:
SHELL=/bin/bash
XDG_RUNTIME_DIR=/run/user/1000
USER=qingsong
_=/usr/bin/awk
SHLVL=1
PWD=/home/qingsong
SSH_CONNECTION=192.168.16.1 60278 192.168.16.128 22
LANG=zh_CN.UTF-8
MAIL=/var/mail/qingsong
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:
PATH=/root/mongodb-linux-x86_64-ubuntu1404-3.4.7/bin/:/root/mongodb-linux-x86_64-enterprise-suse11-3.4.5/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
LESSCLOSE=/usr/bin/lesspipe %s %s
LOGNAME=qingsong
SSH_TTY=/dev/pts/1
XDG_SESSION_ID=1

参考资料:
《The AWK Programming Language》
《Sed and Awk 101 Hacks》
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值