awk
awk 核心价值是取列
附加作用:增,删
- awk命令格式
awk [option] ‘pattern{action}’ file …
awk [参数] ‘条件{动作}’ 文件…
参数选项 | 解释说明 |
---|---|
-F | 指定字段分隔符 * |
变量名 | 解释 |
---|---|
$n | 当前记录的第n行 |
$0 | 当前整行记录 |
NF | 当前记录中的列的个数,就是有多少列 |
${NF-n} | 倒数第n列,n为数字 |
NR | 已经读出的记录数,就是行号,从1开始 |
-
取列的简单例子:
echo 00 11 22 >a.txt //创建一个文件
打印文件内容的第一列awk '{print $1}' a.txt
打印文件内容的第二列awk '{print $1}' a.txt
打印文件内容的第三列awk '{print $1}' a.txt
同时打印第二列第三列awk '{print $2,$3}' a.txt
打印整行awk '{print $0} a.txt'
打印最后一列awk '{print $NF}' a.txt
打印倒数第二列awk '{print $(NF-1)}' a.txt
-
指定分隔符用法
sed -n ‘1,5p’ /etc/passwd >test.txt //创建一个文本文件
打印文本第一列:awk -F ":" '{print $1}' test.txt
打印文本第一列和最后一列:awk -F ":" '{print $1,$NF}' test.txt
打印文本第一列和最后一列,以及一共有几列:awk -F ":" '{print $1,$NF,NF}' test.txt
打印文本第一行和第二行awk 'NR==1,NR==2' test.txt
打印文本第一行和第二行并打印行号awk 'NR==1,NR==2{print NR,$0}' test.txt
过滤出含有root字符串:awk '/root/' test.txt
或者grep root test.txt
打印网卡eth0 ip :ifconfig eth0 | awk 'NR==2{print $2}'
多分隔符列打印:echo "1::::2====3----4" | awk -F "[:=-]+" '{print $1,$2,$3,$4}'
-
awk 带条件
行条件,取出hosts 文件权限 :stat /etc/hosts|awk -F "[0/]" 'NR==4{print $2}'
模糊匹配,过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出:`awk -F “:” ‘$1~/root/{print $NF}’ /etc/passwd -
awk 删除
含有root字符串的行 :awk '/^[^r]/' test.txt
(正则取反得到删除效果)
张桑 男 80
李四 女 70
王五 男 90
赵六 女 100
过滤上面字符串name.txt中第三列内容分数大于70,并且小于95的人名和性别
awk '$3>70 && $3<95{print $1,$2,$3}' name.txt
-
批量创建dalei01…dalei10个用户,并将用户前的数字作为该用户密码:
seq -w 10|awk '{print "useradd","dalei"$1";""echo",$1"|passwd --stdin","dalei"$1}'|bash
-
查看磁盘对应分区inode总量以及inode使用百分百,过滤格式为"/dev/vda : 99"
,不要%:df -i|awk -F"[ %]+" '/dev\/vda/{print $1":"$5}'