awk
提取passwd文件分隔符为冒号的第二行的第3个字段的数据
[root@localhost ~]# awk -F: 'NR==2{print $3}' passwd
1
[root@localhost ~]# cat passwd | awk -F: 'NR==2{print $3}'
1
提取passwd文件第二行一整行数据
[root@localhost ~]# awk -F: 'NR==2{print $0}' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# awk -F: 'NR==2' passwd
bin:x:1:1:bin:/bin:/sbin/nologin
取文件第二行的最后一个字段
[root@localhost ~]# awk -F: 'NR==2{print $NF}' passwd
/sbin/nologin
取文件第二行倒数第二个字段
[root@localhost ~]# awk -F: 'NR==2{print $(NF-1)}' passwd
/bin
取文件里匹配到xixi行的第二个字段
[root@localhost ~]# cat abc
haha 05/99 48311 green 8 40 44
xixi 06/99 48371 green 9 24 26
[root@localhost ~]# awk '/xixi/{print $2}' abc
06/99
取文件里匹配到xixi行的第二个字段并将结果写到hello.txtx文件中
[root@localhost ~]# awk '/xixi/{print $2}' abc |tee hello.txt
06/99
[root@localhost ~]# cat hello.txt
06/99
取文件第一和第五字段
[root@localhost ~]# awk '{print $1,$5}' abc
haha 8
xixi 9 //加逗号会增加空格,不加结果会连在一起
取文件第一字段并加入字段头name
[root@localhost ~]# awk 'BEGIN{print "name"} {print $1}' abc
name
haha
xixi
取文件第一字段并加入字段头name在结尾加入hehe
[root@localhost ~]# awk 'BEGIN{print "name"} {print $1} END{print "hehe"}' abc
name
haha
xixi
hehe
取文件在脚本文件中所得字段的字段
[root@localhost ~]# cat test.awk
#!/usr/bin/awk
{print $1,$2}
[root@localhost ~]# awk -f test.awk abc
haha 05/99
xixi 06/99
取文件第一和第四字段并加入字段头并用table隔开
[root@localhost ~]# awk 'BEGIN{print "名字\t段带"} {print $1"\t"$4}' abc
名字 段带
haha green
xixi green
取文件匹配到green或Green行的倒数第二个字段
[root@localhost ~]# cat abc
haha 05/99 48311 Green 8 40 44
xixi 06/99 48371 green 9 24 26
[root@localhost ~]# awk '/[Gg]reen/{print $(NF-1)}' abc
40
24
在文件中第六个字段小于50取整行
[root@localhost ~]# cat abc
haha 05/99 48311 Green 8 40 44
xixi 06/99 48317 green 9 24 26
lulu 09/19 50000 blue 20 50 55
feilipu 10/19 50001 Black 40 60 70
[root@localhost ~]# awk '{if($6<50) print $0}' abc
haha 05/99 48311 Green 8 40 44
xixi 06/99 48317 green 9 24 26
取文件中第三个字段为50000的行输出整行
[root@localhost ~]# awk '$3 ~ /50000/{print $0}' abc
lulu 09/19 50000 blue 20 50 55
取文件中第四字段不等于blue的所有行
[root@localhost ~]# awk '{if($4!~/blue/) print $0}' abc
haha 05/99 48311 Green 8 40 44
xixi 06/99 48317 green 9 24 26
feilipu 10/19 50001 Black 40 60 70
取文件中开头为h结尾为a的行
[root@localhost ~]# awk '$1~/^h..a$/' abc
haha 05/99 48311 Green 8 40 44
取文件中第五字段是9且第一字段为xixi的行
[root@localhost ~]# awk '{if($5~/9/ && $1~/xixi/)print $0}' abc
xixi 06/99 48317 green 9 24 26
输出文件名
[root@localhost ~]# awk 'END{print FILENAME}' passwd
passwd
输出文件有多少行
[root@localhost ~]# awk 'END{print FNR}' passwd
21
[root@localhost ~]# cat passwd |wc -l
21
输出文件每行有多少列
[root@localhost ~]# awk '{print NF}' abc
7
7
7
7
输出最后字段
[root@localhost network-scripts]# echo $PWD | awk -F/ '{print $NF}'
network-scripts
文件中第四字段等于Black输出第一字段+is belt+第四字段的行
[root@localhost ~]# awk '{name=$1;belt=$4;if($4~/Black/) print name" is blet "belt}' abc
feilipu is blet Black
取文件中第一行第一字段为haha第五字段为第五字段加22输出第五字段
[root@localhost ~]# awk 'NR==1{if($1~/haha/) $5=$5+22;print $5}' abc
30
取文件中第一行第一字段为haha,将哈哈改为tom,输出第一字段
[root@localhost ~]# awk 'NR==1{if($1~/haha/) ($1="tom");print $1}' abc
tom
[root@localhost ~]# awk 'NR==1{if($1=="haha") {($1="tom");print $1}}' abc
tom
% cA S C I I字符
% d整数% e 浮点数,科学记数法% f浮点数,例如(1 2 3 . 4 4)% ga w k决定使用哪种浮点数转换 e或者f% o八进制数% s字符串% x十六进
(两个%s对应前边的name,hellowork字符串)
[root@localhost ~]# awk 'BEGIN{print "name\thelloword"}{printf "%-10s %s\n",$1,$7}' abc
name helloword
haha 44
xixi 26
lulu 55
feilipu 70
取文件中第五字段的和
[root@localhost ~]# awk '{total=$5} END{print "The club is:" total}' abc
The club is:40
将文件中字段40的改为100并打印出哪一行
[root@localhost ~]# cat abc
haha 05/99 48311 Green 8 40 44
xixi 06/99 48317 green 9 24 26
lulu 09/19 50000 blue 20 50 55
feilipu 10/19 50001 Black 40 60 70
[root@localhost ~]# awk 'gsub(/40/,100){print $0}' abc
haha 05/99 48311 Green 8 100 44
feilipu 10/19 50001 Black 100 60 70
[root@localhost ~]# awk 'sub(/40/,100,$0)' abc
haha 05/99 48311 Green 8 100 44
feilipu 10/19 50001 Black 100 60 70
第二字段是从第一个字段的第几位开始的
[root@localhost ~]# awk 'BEGIN{print index("jobtomjerryhello","rr")}'
9
查看文件第一字段的字符数并打印
[root@localhost ~]# awk '{print length($1) $1}' abc
4haha
4xixi
4lulu
7feilipu
[root@localhost ~]# echo |awk 'BEGIN{print split("123#456#789",haha,"#")}{print haha[2]}'
3
456
[root@localhost ~]# awk '$1~/feilipu/{print substr($1,3,3)}' abc
ili
[root@localhost ~]# awk '$1~/feilipu/{print substr($1,3)}' abc
ilipu
[root@localhost ~]# echo|awk 'BEGIN{a="helloword"}END{print substr(a,3)}'
lloword