咨询热线:4006-75-4006
售前:9:00-23:30 备案:9:00-18:00 技术:7*24h
1.awk是一个非常棒的数据处理工具,sed常常用于一个整行的处理,而awk则比较倾向于一行中分成数段的数据处理,通常的模式是这样的:
awk ‘条件类型{动作1} 条件类型2{动作2} ....’ filename
2.cat /etc/passwd | awk -F : ‘{print $1 “ ” $4 “ ” $5}’
从以上截图看出用参数-F指定域分隔符,然后打印出/etc/passwd文件的第1列、第4列、第5列,并且每列用tab隔开
-F 表示指定分隔符,默认的是空格,如果有文档中有空格那么不需要用这个参数,相当于”cut -d “:” -d 1”命令;
“ ”表示tab键;
在每个动作完成之后都会执行 另起一行;
3.cat /etc/passwd | awk -F : ‘BEGIN {print “name” “ ” “shell”} {print $1 “ ” $7} END {print “end” “ ” “end”}’
awk工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作。
3.awk ‘/nginx/’ /etc/passwd
此时的awk命令就相当于grep nginx /etc/passwd命令
4.df -h | awk ‘$4>20’ 打印第四列数字大于20的行
5.awk几个内建变量
(1)NF 每一行($x)拥有的栏位总数
(2)NR 目前awk所处理的是第几行数据
(3)FS 目前的分隔字节,默认的是空白键
例如:cat /etc/passwd | awk -F ":" {print $1 " " $7 " lines:" NR " columns:" NF}