awk案例整理

--关于内建变量,统一总结下:
0 当前记录(即整个行的内容)1~$n 当前记录的第n个字段,字段间由FS分隔
FS 输入字段分隔符 默认是空格或Tab
NF 当前记录中的字段个数,就是有多少列
NR 已经读出的记录数,就是行号,从1开始,当有多个文件的时候记录数就会累加
FNR 当前记录数,与NR不同的是,这个值会是各个文件自己的行号,多个文件也不会累加
RS 输入的记录分隔符, 默认为换行符
OFS 输出字段分隔符, 默认也是空格
ORS 输出的记录分隔符,默认为换行符
FILENAM 当前输入文件的名字

awk案例

echo "a b c d" |awk '{2=2" e f g";print}'

格式化文本

awk 'BEGIN{OFS="\t"}{1=1;print $0}' a.txt

取lo之外的所有ip地址

ifconfig|awk '/inet/ && !(2 ~ /^127/){print2}'
ifconfig|awk 'BEGIN{RS=""}!/lo/{print $6}'

awk '$6=="LISTEN"' netstat.txt

忽略第一行

ls -rlth|awk 'NR>1 {print $1}'

能输出

awk -F : -v n=3 'n{print 1 "-"3}' /etc/passwd

awk -F: '$4=="4" {print}' /etc/passwd

不能输出

awk -F : -v n=0 'n{print 1 "-"3}' /etc/passwd

awk '$3>10{print}' /etc/passwd

查看链接情况

netstat -natp | awk '/^tcp/ {++state[$6]} END {for(key in state) print key,"",state[key]}'

打印长度

awk 'BEGIN{print length("hello")}'

使用函数

awk -F ":" '{print toupper($1)}' /etc/passwd

输出每行倒数4个字符

awk '{print substr(0,length(0)-6,length($0))}' /etc/passwd

取IDC最后4位

cat idc.txt |awk '{print toupper(substr(0,length(0)-4,length($0)))}'|sort|uniq

匹配有用户的

awk '/usr/' /etc/passwd

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容