awk条件
1,使用正则作为条件 ~包含 !~不包含
awk -F: ‘$1~/root/{print}’ user 输出第1列包含root的行
awk -F: ‘$1!~/root/{print}’ user 输出第1列不包含root的行
awk -F: ‘$1!~/root/’ user 省略写法,效果同上
2,使用数字,字符串做条件
比较符号:==(等于) !=(不等于) >(大于)
=(大于等于) <(小于) <=(小于等于)
awk 'NR==1{print}' user 输出第一行
awk 'NR==1' user 省略写法,效果同上
awk 'NR>2' user 输出大于第二行的行
awk -F: '$3<10{print}' /etc/passwd 输出第3列(uid)小于10的行
awk -F: '$3<10' /etc/passwd 效果同上
awk -F: '$3<10{print $3}' /etc/passwd 找到第3列小于10的行,并输出第3列
awk -F: '$3>=1000' /etc/passwd 输出uid大于等于1000的账号信息
3,逻辑测试条件
条件1 && 条件2 {print} 两个条件都满足才执行print任务
条件1 || 条件2 {print} 有任何一个条件满足就执行print任务
awk 'NR>=2&&NR<=4' user 输出2~4行
awk -F: 'NR>=2&&NR<=4{print $1}' user 找2~4行并输出第1列
awk -F: 'NR==4 ||NR==5{print $1}' user 找4行或5行并输出第1列
awk -F: 'NR>=10 || NR<=20{print $1}' user 找10行以及大于10行的内容, 或者20以内的行, 相当于所有行,再显示第1列
awk -F: 'NR<10 && NR>20{print $1}' user 不存在的行,逻辑错误
#!/bin/bash
user=awk -F: '/bash$/{print $1}' /etc/passwd
for i in $user
do
grep $i /etc/shadow | awk -F: ‘{print $1 “–>” $2}’
done