Linux之文本处理--awk

1.grep -->egrep -->文本过滤 

   gwak(gun awk): 支持数学运算,流控(if-else,循环,正则),本质上就是一门语言 patten or scanning and processing language

2.awk:文本截取,模式扫描和处理的语言。

3.sed :文本的替换和修改

awk命令详解

完整语法 :awk 'BEGIN{commands}pattern{commands}END{commanda}' file1

BEGIN、 END -->只执行一次

awk -F 分隔符  ‘/模式/{动作}’  输入文件
awk的指令一定要用单引号括起
awk的动作一定要用花括号括起
模式可以是正则表达式、条件表达式或两种组合,如果模式是正则表达式要用/定界符,多个动作之间用;号分开
awk命令的操作符
正则表达式和bash一致
数学运算:+,-,*,/, %,++,- -
逻辑关系符:&&, ||, !
比较操作符:>,<,>=,!=,<=,==  ~ !~

awk 内置变量 内部引用变量不需要'$'符号
FS :当前的分隔符,默认是空白字符
OFS :当前的输出 分隔符,默认是空白字符
NR : 当前行号
NF: number of filed 一行里面有多少个字段 $NF -->取最后一个字段 倒数第二个 $NF-1

 

单词界定符号

\单词以feng开头

feng\> -->单词以feng 结尾

\ -->查找单词feng

一、

(1)输出 /etc/passwd下第1,3,4个字段

[root@wang lianxi]# awk -F ':' '{print$1 $3 $4}' /etc/passwd

(2)指定分隔符“#”

[root@wang lianxi]# awk -F: 'OFS="#"{print $1,$3,$4}' /etc/passwd
# 注意单双引号;

(3)生成指定文件

 awk -F: 'OFS="#"{print $1,$3,$4}' /etc/passwd >passwd.csv

(4) 输出拼接

 awk -F: 'OFS="#"{print "username:"$1 " uid: " $3 " gid: " $4}' /etc/passwd
 username:root uid:0 gid:0

(5)找出含指定bash字段

[root@wang lianxi]# awk '/bash/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
webadmin:x:1000:1000::/home/webadmin:/bin/bash

(6)找出第1,7 个字段不是 以h开头的行

[root@wang lianxi]# awk -F: '/^[^h]/{print $1,$7}' /etc/passwd 

练习:

1.使用NF变量显示passwd文件倒数第二列的内容
[root@localhost ~]# cat /etc/passwd|awk -F: '{print $(NF-1)}'


	2.显示passwd文件中第5到第10行的用户名
[root@localhost ~]# cat /etc/passwd|awk 'NR>=5&&NR<=10'


	3.显示passwd文件中第7列不是bash的用户名
 cat /etc/passwd|awk  -F:'$7 !~ /bash/{print NR,$1}'


	4.显示passwd文件中行号是5结尾的行号和行
cat /etc/passwd|awk   -F: 'NR  ~/5/ {print $0 NR}'


	5.用ip add 只显示ip(不能使用tr或者cut命令)
[root@wsy lianxi]# ip add|awk -F "[ /]+" '/inet /{print $3}'


	6.使用awk显示ens33的入站流量和出站流量(字节) --》ifconfig  --》安装net-tools软件包
[root@localhost ~]# ifconfig| awk 'NR==5||NR==7{print $5}'


	7.使用awk命令统计以r开头的用户数目
[root@wang lianxi]# cat /etc/passwd|awk -F: 'BEGIN{n=0}$1 ~/^r/{n++}END{print n}'

 

 

 

 

 

你可能感兴趣的:(Linux之文本处理--awk)