AWK 笔记

#示例文本文件
cat a.txt 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

 #awk 计算出现次数   如需排序结合使用sort、tail/head

awk -F ':' '{for(i=1;i<=NF;i++){a[$i]++}}END{for(b in a){print b"出现"a[b]"次"}}' a.txt  
/sbin/nologin出现1次
root出现2次
/bin出现1次
x出现2次
/root出现1次
bin出现2次
/bin/bash出现1次
0出现2次
1出现2次

 #awk 简单使用示例(一部分)


awk '/root/{print $0}' a.txt  #包含root字符的一行
root:x:0:0:root:/root:/bin/bash

awk -F ":" '$5~/root/{print $0}' a.txt #以:分割,第五个包含root字符的行
root:x:0:0:root:/root:/bin/bash

awk -F ":" '$5!~/root/{print $0}' a.txt #以:分割,第五个不包含root字符的行
bin:x:1:1:bin:/bin:/sbin/nologin

awk -F ":" '$5!="root"{print $0}' a.txt  #以:分割,第五个不等于root字符的行(完全匹配)
bin:x:1:1:bin:/bin:/sbin/nologin

awk -F ":" '$5=="root"{print $0}' a.txt  #以:分割,第五个等于root字符的行(完全匹配)
root:x:0:0:root:/root:/bin/bash

awk -F ":" '$3<1{print $0}' a.txt #以:分割,第三个小于1的行(数字)(= < > <= >=)
root:x:0:0:root:/root:/bin/bash

awk -F ":" '$3<1&&$5!~/root/{print $0}' a.txt # &&示例 多者都满足
awk -F ":" '$3<1||$5!~/root/{print $0}' a.txt # ||示例 或/满足一者 

#有多个命令在{}使用;隔开
#-F '[,:]'  #可以匹配正则 以,和:分割
awk -F'[,:]' '{$3++;print $3}' a.txt  #先计算在输出
1
2

#awk 'BEGIN{}{}END{}' file 格式 #BEGIN{行为1;行为2..} END{行为1;行为2..}
awk -F'[,:]' 'BEGIN{print "用户\tUID"}{print $1,"\t",$3}' a.txt 
用户	    UID
root 	 0
bin 	 1

awk 'BEGIN{FS="[,:]";a=1}{print $a,a}' a.txt. #变量FS="-F" 引用变量不需要加$
root 1
bin 1

awk 'BEGIN{FS="[,:]"}{sum+=$3}END{print "UID总和为:"sum}' a.txt #计算UID总和
UID总和为:1 

awk 'BEGIN{RS=":"}{print $0}' a.txt #内置变量RS=":" 已":"为行分隔符
root
x
0
0
root...

awk 'BEGIN{ORS="---"}{print $0}' a.txt #默认ORS="\n" 可自定义 每行连接符
root:x:0:0:root:/root:/bin/bash---bin:x:1:1:bin:/bin:/sbin/nologin---% 

awk 'END{print NR}' a.txt #打印文件行数
2
awk NR==1 a.txt #打印第一行
root:x:0:0:root:/root:/bin/bash

#同时打开多个文件并区分文件
awk 'NR==FNR{print $0,FILENAME}NR!=FNR{print $0,FILENAME}' a.txt b.txt
root:x:0:0:root:/root:/bin/bash a.txt
bin:x:1:1:bin:/bin:/sbin/nologin a.txt
qwe,12,re b.txt


#awk '{if(){}else if(){}else{}}' file / awk '{if() ;else if() ;else }'
awk -F '[:,]' '{if($3==0){print $1"是root用户"}else if($3>=1000){print $1"是普通用户"}else{print $1"是系统用户"}}' a.txt
root是root用户
bin是系统用户
    
awk -F':' '{print ($3==0?"是root":"不是root")}' a.txt 
是root
不是root

#一行一行循环 循环结束一行才循环下一行
awk -F':' '{for(i=1;i<=NF;i++){print $i}}' a.txt  #分别打印
root
x
0
0
root
/root...

#循环每一个字段并且判断包括"/"的字段才输出;next:包括了直接跳下一行 
awk -F":" '{for(i=1;i<=NF;i++){if($i~"/"){print $i;next}}}' a.txt
/root
/bin

#循环每一个字段并且判断包括"/"的字段才输出;
awk -F":" '{for(i=1;i<=NF;i++){if($i~"/"){print $i}}}' a.txt     
/root
/bin/bash
/bin
/sbin/nologin

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值