Linux awk命令实践

awk

awk 核心价值是取列
附加作用:增,删

  1. awk命令格式
    awk [option] ‘pattern{action}’ file …
    awk [参数] ‘条件{动作}’ 文件…
参数选项解释说明
-F指定字段分隔符 *
变量名解释
$n当前记录的第n行
$0当前整行记录
NF当前记录中的列的个数,就是有多少列
${NF-n}倒数第n列,n为数字
NR已经读出的记录数,就是行号,从1开始
  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
    在这里插入图片描述

  2. 指定分隔符用法
    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}'

  3. awk 带条件
    行条件,取出hosts 文件权限 : stat /etc/hosts|awk -F "[0/]" 'NR==4{print $2}'
    模糊匹配,过滤文件中第一列内容匹配root的字符串,把符合的行的最后一列输出:`awk -F “:” ‘$1~/root/{print $NF}’ /etc/passwd

  4. 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

  1. 批量创建dalei01…dalei10个用户,并将用户前的数字作为该用户密码:
    seq -w 10|awk '{print "useradd","dalei"$1";""echo",$1"|passwd --stdin","dalei"$1}'|bash

  2. 查看磁盘对应分区inode总量以及inode使用百分百,过滤格式为"/dev/vda : 99"
    ,不要%:df -i|awk -F"[ %]+" '/dev\/vda/{print $1":"$5}'

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值