awk命令详解

语法格式

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

你可能感兴趣的:(awk命令详解)