语法格式
awk [options] 'script' var=value file(s)
awk [options] -f scriptfile var=value file(s)
内置变量
$0 当前行的文本内容
$n 当前行的第n个字段
ARGC 命令行参数个数
ARGV 命令行参数数组
ARGIND 命令行中当前文件的位置(从0开始,处理多个文件时,应用用ARGIND==0, ARGIND==1等)
ENVIRON 环境变量关联数组
FILENAME 当前输入文件名
NR 表示记录数,执行过程中对应当前行号
FNR 同NR,但相对于当前文件
FS 字段分隔符
IGNORECASE 忽略大小写的匹配
NF 表示字段数
OFS 输出字段分隔符
ORS 输出记录分隔符
RS 记录分隔符
外部变量传给awk
a=100
awk -v v=$a '{print v}'
或
v1="aaa"
v2="bbb"
echo | awk '{print var1,var2}' var1=$v1 var2=$v2
打开外部文件
awk 'BEGIN{while("cat /etc/passwd"|getline){print $0;};close("/etc/passwd");}'
调用外部应用程序
awk 'BEGIN{b=system("ls -al"); print b;}'
其他示例
head tmp.txt tmp2.txt
==> tmp.txt <==
a 100
b 200
c 300
d 400
==> tmp2.txt <==
a 1-00
b 2-00
c 3-00
#两个文件merge
awk 'BEGIN{FS="\t";OFS="\t";}NR==FNR{a[$1]=$2;}NR>FNR{print $1,$2,a[$1]}' tmp.txt tmp2.txt
a 1-00 100
b 2-00 200
c 3-00 300
#分别处理几个文件(也可以赋值后,在END中拼接)
awk 'BEGIN{FS="\t";OFS="\t";}
ARGIND==1{tmp[$1]=$2}
ARGIND==2{tmp2[$1]=$2}
ARGIND==3{tmp3[$1]=$2}
END{for(t in tmp){print t,tmp2[t],tmp3[t];}}'
tmp.txt tmp2.txt tmp3.txt
网友评论