六周第三次课(4月27日)

9.6/9.7awk

-F :指定分割符

# awk -F ':' '{print $1}' test.txt          //$1表示第一段,表示所有的段用$0

六周第三次课(4月27日)


打印多段

# awk -F ':' '{print $1,$3,$4}' test.txt

六周第三次课(4月27日)



不指定-F选项,默认以空格或空白字符为分割符

六周第三次课(4月27日)


指定打印段的分割符

# awk -F ':' '{print $1"@"$3"@"$4}' test.txt

六周第三次课(4月27日)


打印包含指定字符的段

# awk '/oo/' test.txt

六周第三次课(4月27日)


在指定的段匹配指定的字符

# awk -F ':' '$1 ~ /oo/' test.txt   //以冒号分割后取第一段,然后取匹配含oo的

六周第三次课(4月27日)

#awk -F ':' '$1 ~ /oo+/' test.txt   //同样支持之前的+

六周第三次课(4月27日)


在同一个表达式中,多个动作

# awk  -F ':' '/root/ {print $1,$3} /sshd/ {print $3,$4}' test.txt

六周第三次课(4月27日)


# awk  -F ':' '/root|sshd/ {print $0}' test.txt   //打印含有root或sshd的行

六周第三次课(4月27日)


数学运算相关

# awk -F ':' '$3==0 {print $1}' test.txt   //匹配第三段等于0的行,然后打印第一段

六周第三次课(4月27日)

六周第三次课(4月27日)


#awk -F ':' '$3>=1000 {print $0}' test.txt   //第三段大于1000的行  
六周第三次课(4月27日)

注意数字不能加“”,否则以字符来处理了

六周第三次课(4月27日)

# awk -F ':' '$3!=1000 {print $3}' test.txt     //打印第三段不等于1000的行的第三段  

六周第三次课(4月27日)


匹配第三段小于第四段的行,并打印第三段和第四段

# awk -F ':' ' $3<$4 {print $3,$4}'  passwd

六周第三次课(4月27日)

完整的写法为

# awk -F ':' ' {if ($3<$4) {print $3,$4}}'  passwd

六周第三次课(4月27日)


#awk -F ':' '$3>1 && $3<7  {print $0}' test.txt    //第3段大于1小于7的行  //&&=且

六周第三次课(4月27日)

#awk -F ':' '$3>1000 || $7 ~ /bash/  ' passwd      //第三段大于1000或第七段匹配bash      // ||=或

六周第三次课(4月27日)


同时指定新的分割符

# awk -F ':' '{OFS="#"} $3>1000 || $7 ~ /bash/ {print $1,$3,$7}' passwd  //OFS作用是打印的时候指定分割符

六周第三次课(4月27日)


打印行号:NR

# awk -F ':' '{print NR ":" $0}' test.txt

六周第三次课(4月27日)

打印前10行

# awk -F ':' 'NR<=10' test.txt

六周第三次课(4月27日)

# awk -F ':' 'NR<=10 && $1 ~ /root|sync/' test.txt  //前10中,含有root或sync的行

六周第三次课(4月27日)


显示段数:NF

# awk -F ':' '{print NF ":" $0}' test.txt          // 每行都是7段

六周第三次课(4月27日)

# awk -F ':' 'NF==7 && $1 ~ /root|sync/' test.txt    //段数为7且含有root或sync的

六周第三次课(4月27日)


# awk -F ':' '{print $NR":"$NF}' test.txt   //$NR表示第n行第n段,所以7行之后是空的,$NF其实是代表每行最后一段

六周第三次课(4月27日)


“==”和“=”

# head -n 3 test.txt |awk -F ':' '$1=="root"'   //匹配第一段为root的
六周第三次课(4月27日)


# head -n 3 test.txt |awk -F ':' '$1="root"'     //把第一段赋值为root

六周第三次课(4月27日)

计算每行第三段值的和(也就是第3列)

# awk -F ':' '{(tot=tot+$3)}; END {print tot}' test.txt
六周第三次课(4月27日)