LINUX AWK命令详细使用方法
[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,] awk是一种优良的文本处理工具.可以对文件中的内容一行一行提取并处理,也可将文件分列的形式提取.
[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]awk内置变量:[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]$0 --输出文件所有内容[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]$1-$n --以分隔符输出每列的值[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]FILENAME --输出文件名[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]FS --输出字段的分隔符[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]NF --当前记录的字段数目[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]NR --当前记录的编号[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]OFS --输出字段的分隔符[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]ORS --输出记录分隔符[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]RS --控制记录分隔符
[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]文件内容:[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,][root@tong1 opt]# cat passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
[root@tong1 opt]#
[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]1.awk命令格式[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]awk '{pattern + action}' {filenames}
[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]2.内置变量实例[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,][root@tong1 opt]# awk -F: '{print "第一列值:"$1,"文件名:"FILENAME,"每列共多少字段:"NF,"输出每行编号:",NR,"输出字段分隔符:"OFS}' passwd
第一列值:root 文件名:passwd 每列共多少字段:7 输出每行编号: 1 输出字段分隔符:
第一列值:bin 文件名:passwd 每列共多少字段:7 输出每行编号: 2 输出字段分隔符:
第一列值:daemon 文件名:passwd 每列共多少字段:7 输出每行编号: 3 输出字段分隔符:
第一列值:adm 文件名:passwd 每列共多少字段:7 输出每行编号: 4 输出字段分隔符:
第一列值:lp 文件名:passwd 每列共多少字段:7 输出每行编号: 5 输出字段分隔符:
第一列值:sync 文件名:passwd 每列共多少字段:7 输出每行编号: 6 输出字段分隔符:
第一列值:shutdown 文件名:passwd 每列共多少字段:7 输出每行编号: 7 输出字段分隔符:
第一列值:halt 文件名:passwd 每列共多少字段:7 输出每行编号: 8 输出字段分隔符:
第一列值:mail 文件名:passwd 每列共多少字段:7 输出每行编号: 9 输出字段分隔符:
第一列值:uucp 文件名:passwd 每列共多少字段:7 输出每行编号: 10 输出字段分隔符:
第一列值:operator 文件名:passwd 每列共多少字段:7 输出每行编号: 11 输出字段分隔符:
第一列值:games 文件名:passwd 每列共多少字段:7 输出每行编号: 12 输出字段分隔符:
第一列值:gopher 文件名:passwd 每列共多少字段:7 输出每行编号: 13 输出字段分隔符:
第一列值:ftp 文件名:passwd 每列共多少字段:7 输出每行编号: 14 输出字段分隔符:
[root@tong1 opt]#[root@tong1 opt]#
[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]3.用printf输出格式[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,][root@tong1 opt]# awk -F: '{printf ("第一列值:%-10s,文件名:%-10s,每列共多少字段:%-3s,输出每行编号:%-3s,输出字段分隔符:%10s\n",$1,FILENAME,NF,NR,OFS)}' passwd
第一列值:root ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:1 ,输出字段分隔符:
第一列值:bin ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:2 ,输出字段分隔符:
第一列值:daemon ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:3 ,输出字段分隔符:
第一列值:adm ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:4 ,输出字段分隔符:
第一列值:lp ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:5 ,输出字段分隔符:
第一列值:sync ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:6 ,输出字段分隔符:
第一列值:shutdown ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:7 ,输出字段分隔符:
第一列值:halt ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:8 ,输出字段分隔符:
第一列值:mail ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:9 ,输出字段分隔符:
第一列值:uucp ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:10 ,输出字段分隔符:
第一列值:operator ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:11 ,输出字段分隔符:
第一列值:games ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:12 ,输出字段分隔符:
第一列值:gopher ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:13 ,输出字段分隔符:
第一列值:ftp ,文件名:passwd ,每列共多少字段:7 ,输出每行编号:14 ,输出字段分隔符:
[root@tong1 opt]#
[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,]4.awk中的if语句[p=28, null, left][color=rgb(44, 44, 44)][font=宋体,][root@tong1 opt]# awk -F: '{if ($1~/root/) print $1,"\n",$0}' passwd
root
root:x:0:0:root:/root:/bin/bash
[root@tong1 opt]#