day 28 awk

来源:互联网 发布:vb.net 入门 编辑:程序博客网 时间:2024/05/21 21:47

9.6~9.7 awk

1、awk--打印
  • awk -F':' '{print $1}' test.txt --#指定分隔符为“:”,打印第1字段,“$1”代表第一字段,该操作不会更改原文件内容,不像sed有“-i”的选项可以更改原文件
  • awk -F':' '{print $1,$2,$3}' test.txt --#指定分隔符为“:”,打印第1字段、第2字段和第3字段的内容,打印多个字段时,用逗号隔开各字段

  • awk -F':' '{print $1"#"$2"#"$3}' test.txt --#指定分隔符为“:”,打印第1字段、第2字段和第3字段的内容,且指定各段内容以“#”分隔,需在各段中加“#”,并以双引号括起

  • awk -F':' '{print$0}' test.txt --#指定分隔符为“:”,打印所有段内容,“$0”代表所有段,也可直接用命令: awk '{print $0}' test.txt。 若不使用“-F”选项指定分隔符,默认会使用空格/空白符为分隔符
2、awk--匹配

  • awk '/oo/' test.txt                                                                                 --#匹配指定文件含“oo”的行并打印出来
  • awk -F':' '$1 ~ /oo/' test.txt                                                                  --#匹配指定文件中指定段(第1段)含“oo”的行并打印出来,也支持正则,比如awk -F':' '$1 ~ /oo+/' test.txt,使用特殊字符时均不用加脱意字符和特殊选项
  • awk -F':' '/root/ {print $1,$3} /user/ {print $1,$6,$7}' test.txt            --#包含"root"的行中打印第1和第3字段,包含“user”的行中打印第1、第6和第7字段的内容,依次匹配,若有重复,会打印两次
  • awk -F':' '/root|user/ {print $0}' test.txt --#打印包含“root”或“user”的所有段
  • awk -F':' '$3==0 {print $1}' test.txt                                               --#打印第3字段等于0的行中的第1字段
  • awk -F':' '$3>=1000 {print $0}' test.txt --#打印第3字段大于等于1000的行中的所有字段,也可不要"{print $0}"
  • awk -F':' '$3>="1000" {print $0}' test.txt --#打印第3字段大于等于字符串“1000”对应的ASCII码值的所有字段,注意加了双引号,表示字符串
  • awk -F':' '$7!=“/sbin/nologin”{print $0}' test.txt --#打印第7字段不等于/sbin/nologin的所有字段,注意指定的字段要加双引号
  • awk -F':' '$3<$4 ' test.txt                                                               --#打印满足第3字段小于第4字段的行
  • awk -F':' '$3>"5" && $3<"7" ' test.txt --#打印满足第3字段大于“5”小于“7”的行

  • awk -F':' '$3>1000 || $7 ~ /bash/ ' test.txt--#打印满足第3字段大于1000第7字段匹配bash的行,注“~”表示匹配,对应的字段内容只要包含指定关键字就算匹配,而“==”表示严格匹配,对应字段内容必须严格为关键字内容才算匹配
  • awk -F':' '{OFS="#"} $3>1000|| $7 ~ /bash/ {print $1,$3,$7} ' test.txt --#"OFS"为内置变量,指定打印内容的分隔符

  • awk -F':' '{OFS="#"} {if ($3>1000 ) {print $1,$3,$7}} ' test.txt --#加上if条件语句更规整的写法,等价于awk -F':' '{OFS="#"} $3>1000 {print $1,$3,$7} ' test.txt
  • awk -F':' '{print NR":"$0}' test.txt --#变量NR代表行号,打印出所有行并加上行号,以“:”分隔,注意要加双引号引上
  • awk -F':' '{print NF":"$0}' test.txt --#变量NF代表段号,打印出所有行并加上段号,以“:”分隔.
  • awk -F':' 'NR<=10 && $2 ~ /root|sync/' test.txt              --#NR可用于条件语句,打印出第1~10行中,第2字段匹配root或sync的行
  • awk -F':' '{print $NF":" $NR}' test.txt                              --#取NF和 NR变量的值,打印对应字段,如果test.txt文件各行有7段,则$NF表示打印第7字段,当打印到第8行时,由于不存在第8字段($8),则“:”后内容为空

  • head -n 3 test.txt |awk -F':' '$1="root"'--#给第1字段赋值"root",复制之后分隔符":"没有了,可通过OFS指定 head -n 3 test.txt |awk -F':' ' {OFS=":"} $1="root"'

  • awk -F':' '{(tot=tot+$3)}; END {print tot}' test.txt            --#求各行第3字段的累加和,tot变量未赋值,初始默认值为0
原创粉丝点击