1.16 awk高级应用

mac2024-07-05  51

目录

[root@yusyang ~]# awk -F: 'NR==2{print $1}' passwd //取第二行的第一列 bin [root@yusyang ~]# head -2 passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@yusyang ~]# awk -F: 'NR==1{print $0}' passwd //取第一行的整行 root:x:0:0:root:/root:/bin/bash [root@yusyang ~]# awk -F: 'NR==1{print $1}' passwd root [root@yusyang ~]# awk -F: 'NR==1{print $7}' passwd /bin/bash [root@yusyang ~]# awk -F: 'NR==1{print $NF}' passwd /bin/bash [root@yusyang ~]# awk -F: 'NR==1{print $(NF-1)}' passwd /root [root@yusyang ~]# awk -F: 'NR==2' passwd //取第二行的整行 bin:x:1:1:bin:/bin:/sbin/nologin [root@yusyang ~]# ip a |grep 'inet ' inet 127.0.0.1/8 scope host lo inet 192.168.80.128/24 brd 192.168.80.255 scope global eth0 [root@yusyang ~]# ip a|grep 'inet '|awk -F'[ /]+' 'NR==2{print $3}' //打印主机ip地址,取第二行 192.168.80.128 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk 'NR==1{print $2}' abc 05/99 [root@yusyang ~]# awk '/M.Tansley/{print $2}' abc 05/99 [root@yusyang ~]# awk '/J.Lulu/{print $2}' abc 06/99 [root@yusyang ~]# awk '/J.Lulu/{print $2}' abc | tee hello.txt //打印匹配的含有J.Lulu的行的第二列,并写入hello.txt文件 06/99 [root@yusyang ~]# cat hello.txt 06/99 [root@yusyang ~]# awk '{print $1,$4}' abc //逗号会增加空格 M.Tansley Green J.Lulu green K.King green [root@yusyang ~]# awk '{print $1$4}' abc //不加逗号结果会连在一起 M.TansleyGreen J.Lulugreen K.Kinggreen [root@yusyang ~]# awk 'BEGIN{print "name date"}{print $1,$2}' abc //在第一行加一行字 name date M.Tansley 05/99 J.Lulu 06/99 K.King 07/99 [root@yusyang ~]# awk 'BEGIN{print "name date"} {print $1,$2} END{print "hehe"}' abc //在第一行和最后一行分别加一行字 name date M.Tansley 05/99 J.Lulu 06/99 K.King 07/99 hehe [root@yusyang ~]# cat test.awk //awk脚本编写 #!/usr/bin/awk {print $2} [root@yusyang ~]# awk -f test.awk abc //脚本调用 05/99 06/99 07/99 [root@yusyang ~]# awk -F: -f test.awk passwd x x x x //首尾输出应用 [root@yusyang ~]# awk 'BEGIN{print "段位\t年龄"} {print $4"\t"$5}' abc 段位 年龄 Green 8 green 9 green 10 [root@yusyang ~]# awk 'BEGIN{print "段位\t年龄"} {print $4"\t"$5} END{print "---------------------------\n6666"}' abc 段位 年龄 Green 8 green 9 green 10 --------------------------- 6666 //过滤并输出倒数第二列 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '/Green/{print $(NF-1)}' abc 40 [root@yusyang ~]# awk '/[Gg]/{print $(NF-1)}' abc 40 24 24 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '{if($5<10) print $0}' abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 [root@yusyang ~]# awk '$3 ~ /48322/{print $0}' abc K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '$3 !~ /48322/{print $0}' abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '{if($5~10) print $0}' abc K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '{if($5!~10) print $0}' abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '$1 ~ /^J\....u$/' abc J.Lulu 06/99 48317 green 9 24 26 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '$4 ~ /(Green|green)/' abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '/^J/' abc J.Lulu 06/99 48317 green 9 24 26 [root@yusyang ~]# awk '/4$/' abc M.Tansley 05/99 48311 Green 8 40 44 [root@yusyang ~]# awk '{if($1 ~ /y$/) print $0}' abc M.Tansley 05/99 48311 Green 8 40 44 [root@yusyang ~]# awk '{if($4 ~ /green/ && $1 ~ /J.Lulu/) print $0}' abc J.Lulu 06/99 48317 green 9 24 26 //FNR查看一共有几行数据 [root@yusyang ~]# awk 'END{print FNR}' passwd 29 [root@yusyang ~]# cat passwd |wc -l 29 [root@yusyang ~]# awk 'BEGIN{FS=":"}{print $1,$3}' passwd root 0 bin 1 daemon 2 adm 3 lp 4 sync 5 [root@yusyang ~]# awk '{print NF}' abc 7 7 7 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk 'END{print NR}' abc 3 [root@yusyang ~]# awk '{print NF,NR,$0}' abc 7 1 M.Tansley 05/99 48311 Green 8 40 44 7 2 J.Lulu 06/99 48317 green 9 24 26 7 3 K.King 07/99 48322 green 10 24 56 //取路径中最后一个元素 [root@yusyang ~]# cd /etc/sysconfig/network-scripts/ [root@yusyang network-scripts]# echo $PWD |awk -F/ '{print $NF}' network-scripts [root@yusyang network-scripts]# basename /etc/sysconfig/network-scripts/ network-scripts [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '{name=$1;belt=$4;if(belt ~ /green/) print name" is belt "belt}' abc J.Lulu is belt green K.King is belt green [root@yusyang ~]# awk 'BEGIN{score="10"}{if($6 > score) print $0}' abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk 'BEGIN{score="24"}{if($6 > score) print $0}' abc M.Tansley 05/99 48311 Green 8 40 44 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '{if($1 ~ /J.Lulu/) $6=$6+26;print $1,$6}' abc M.Tansley 40 J.Lulu 50 K.King 24 [root@yusyang ~]# awk '{if($1 ~ /J.Lulu/) ($1="tom");print $0}' abc M.Tansley 05/99 48311 Green 8 40 44 tom 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# cat abc M.Tansley 05/99 48311 Green 8 40 44 J.Lulu 06/99 48317 green 9 24 26 K.King 07/99 48322 green 10 24 56 [root@yusyang ~]# awk '{if($6<$7){$8=$7-$6};print $0}' abc M.Tansley 05/99 48311 Green 8 40 44 4 J.Lulu 06/99 48317 green 9 24 26 2 K.King 07/99 48322 green 10 24 56 32 [root@yusyang ~]# awk '{if($6<$7){$8=$7-$6};printf "%-15s %s\n",$1,$8}' abc M.Tansley 4 J.Lulu 2 K.King 32 //数组生成 [root@yusyang ~]# awk 'BEGIN{split("123#456#789",sy,"#");print sy[1]}' 123
最新回复(0)