awk
-F 指定分割符
awk -F ': ' '{print $1}' 1.txt 以冒号为分隔符 打印第一段
print为打印的意思。 $1表示打印第1字段 $0表示整行 截取多个字段 中间以逗号来分隔
不加-F选项,默认使用空格或者tab为分隔符,
awk -F ':' '{print $1"#"$3"#"$5}' 1.txt 以井号为分隔符 打印 1 ,3, 5 段
awk '/oo/' 1.tx 打印出有oo的行
awk -F ':' '$1 ~ /oo+/' 1.txt 以冒号为分割符 指定第一段有oo的行 awk默认支持正则表达式
支持多个条件匹配
awk -F ':' '/root/ {print $1,$6} /user/ {print $1,$5}' 1.txt 打印root或者user的行
awk -F ':' '/root|user/ {print $1}' 1.txt 也可以合到一起 | 表示或者
awk -F ':' '$3==0' 1.txt 打印第三段等于0的行
awk -F ':' '$3==0 {print $1}' 1.txt 打印第三段等于0的行 并截取第一段
awk -F ':' '$3>=1000 {print $1}' 1.txt 打印第三段大于等于1000的截取第一段
在和数字进行比较时,若把比较的数字用双引号括起来,那么awk不会认为是数字,而会认为是字符,那么就会按ASCII码表来排序,得不到想要的结果
awk -F ':' '$7!="/sbin/nologin" {print $0}' 1.txt 第七段不等于/sbin/nologin的
awk -F ':' '$3<$4' test.txt //打印第3段小于第4段的行,比较的是数字
awk -F ':' '$3==$4' 1.txt //打印第3段等于第4段的行
awk -F ':' '$3>"4" && $3<"8"' 1.txt $3段大于4字符 并且小于8字符 。数字使用了双引号所以表示的是字符4和8之间
awk -F ':' '$3>1000 || $7=="/sbin/nologin"' 1.txt $3大于1000 或者 $7等于/sbin/nologin 没有双引号就表示数字
awk -F ':' '$3>1000 || $7 ~ /bash/' 1.txt $3大于1000 或者$7匹配bash的
OFS 打印是指定分隔符
awk -F ':' '{OFS=“@”} $3>1000 {print $1,$2,$3}' 1.txt
NR 行
awk -F ':' '{print NR ":"$0}' 1.txt 打印出一共有多少行
awk -F ':' 'NR<=10 && $1 ~ /root|sync/' 1.txt 打印前十行 并且 第一段有root或者sync的行
NF 段
awk -F ':' '{print NF ":"$0}' 1.txt 打印出一行有多少段
赋值
head -n 3 1.txt | awk -F ':' '$1="root"' 前3行的第一段赋值成root
head -n 3 1.txt | awk -F ':' '{OFS=":"} $1="root"' 赋值的同时指定分割符号
求和
awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt
每行的第三段累计相加 第一行为0加第三段数字 第二行为第一行的结果加这行第三段的数字