awk-变量使用

 awk -F: '{print $1,$3}' /etc/passwd

awk -F: 'BEGIN{print "begin"}{print $1,$3}END{print "end"}' /etc/passwd

root@ubuntu2004:~# df | awk -F" +|%" '{print $1,$5}'
Filesystem Use
udev 0
tmpfs 1
/dev/mapper/ubuntu--vg-ubuntu--lv 13
root@ubuntu2004:~# awk '{print $1}' access_log |sort |uniq -c|sort -nr|head -n3
   4870 172.20.116.228
   3429 172.20.116.208
   2834 172.20.0.222

1,awk变量

常见内置变量
(1)常见选项:
-F “分隔符” 指明输入时用到的字段分隔符,默认的分隔符是若干个连续空白符
-v var=value 变量赋值
[root@localhost ~]# awk -v FS="/" '{print $1FS$3}' /etc/passwd
root:x:0:0:root:/bin
#-F 和 FS变量功能一样,同时使用会 -F 优先级高
 
(2).OFS:输入字段分隔符,默认为空白字符
awk -v FS="/" -v OFS="+++++++" '{print $1,$2}' /etc/passwd
(3).RS :输入记录record分隔符,指定输入时的换行符
[root@localhost ~]# cat  test.txt
a,b,c;1,2,3;x,y,z;
[root@localhost ~]# awk -v RS=";" -v FS="," '{print $1}' test.txt
a
1
x
(4)ORS:输出记录分隔符,指定输出时用指定符号代替换行符
[root@localhost ~]# awk -v RS=";" -v FS="," -v ORS="-" '{print $1}' test.txt
a-1-x-
(5).NF:字段数量
[root@localhost ~]# awk -F: '{print NF}' /etc/passwd
7
[root@localhost ~]# awk -F: '{print $NF}' /etc/passwd
/bin/bash
取最后一行
 
[root@localhost ~]# df | awk -F" +" '{print $(NF-1)}'
Mounted
0%
0%
1%
0%
8%
100%
1%
26%
1%
0%
[root@localhost ~]# df | awk -F" +|%" '{print $(NF-2)}'

0
0
1
0
8
100
1
26
1
0
Established的HTTP连接的数
[root@localhost ~]# ss -nt | grep "^ESTAB"| awk -F" +|:" '{print $(NF-2)}'
192.168.80.144
192.168.80.181
192.168.80.1

 取行数

root@ubuntu2004:~# awk 'NR==1' access_log 
172.18.118.91 - - [20/May/2018:08:09:59 +0800] "GET / HTTP/1.1" 200 912 "-" "Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 5.1; Trident/5.0)"
root@ubuntu2004:~# awk '{print NR}' access_log
FNR:各文件分别记录,记录编号
awk '{print NR,$0}' /etc/passwd

自定义变量

root@ubuntu2004:~# awk -v name="CHUAN" BEGIN'{print name}'
CHUAN

printf左对齐 %-

%s:显示字符串
%d, %i:显示十进制整数
%f:显示为浮点数
%e, %E:显示科学计数法数值
%c:显示字符的ASCII码 %g, %G:以科学计数法或浮点形式显示数值
%u:无符号整数
%%:显示%自身
root@ubuntu2004:~# awk -F: '{printf "%-25s\n" ,$1}'       /etc/passwd
root                     
daemon
root@ubuntu2004:~# awk -F: '{printf "%-25s %-25s\n" ,$1,$3}'       /etc/passwd
root                      0                        
daemon                    1
root@ubuntu2004:~# awk -F: '{printf "%-25s |  %-25s\n" ,$1,$3}'       /etc/passwd
root                      |  0                        
daemon                    |  1 
root@ubuntu2004:~# awk -F: '{printf "%-25s |  %-25f\n" ,$1,$3}'       /etc/passwd
root                      |  0.000000                 
daemon                    |  1.000000
root@ubuntu2004:~# awk -F: '{printf "%-25s |  %-25.3f\n" ,$1,$3}'       /etc/passwd
root                      |  0.000                    
daemon                    |  1.000

 ++i 加完了干  i++干完了加

root@ubuntu2004:~# awk 'BEGIN{i=0;print i++,i}'
0 1
root@ubuntu2004:~# awk 'BEGIN{i=0;print ++i,i}'
1 1
root@ubuntu2004:~# i=0;let j=i++;echo j=$j
j=0
root@ubuntu2004:~# i=0;let j=++i;echo j=$j
j=1
root@ubuntu2004:~# i=0;let j=i++;echo j=$j i=$i
j=0 i=1
root@ubuntu2004:~# i=0;let j=++i;echo j=$j i=$i
j=1 i=1

 

 

posted @ 2022-04-24 13:24  gg888666  阅读(202)  评论(0编辑  收藏  举报