Lniux学-AWK使用

AWK

AWK 与 sed 的区别

  • AWK用于比较规范的文本处理,用于统计数量并输出指定字段
  • sed 用于将不规范的文本,处理为比较规范的文本

AWK的字段引用和分离

  • AWK也是按行读取,每行称作记录,使用空格、制表符分隔开的单词称作字段,可以自己指定分隔符来隔开字段。
  • 使用$1 $2 ... $n 表示每一个字段,$0 表示一整行
    • awk '{print $1,$2,$3}' filename
    • awk -F "'" '/^menu/{ print $2 }' /boot/grub2/grub.cfg 以'号进行分割字段,取出文件中的内核信息
    • { print x++,$2 } x++ 可以显示行数
  • -F 选项用于指定分隔符
    • awk -F ',' '{print $1,$2,$3}' filename
    • 分隔符可以使用正则表达式表示

AWK的表达式

  • 系统变量
    • FS 和 OFS 字段分隔符,OFS 表示输出的字段分隔符

      • head -5 /etc/passwd | awk 'BEGIN{FS=":"}{ print $1 }'
        BEGING,在读入文件之前,进行预处理。在读入passwd文件之前,就通过FS选项指定好了以“:”作为分隔符。
      • head -5 /etc/passwd | awk 'BEGIN{FS=":";OFS="-"}{ print $1,$2 }' OFS="-",OFS是在查找到字段后,系统是默认使用空格进行隔开,而OFS改变了默认隔开的符号。
    • RS 行记录分隔符,记录行,RS 默认就是一个换行符,在多行合并成单行时,使用RS进行处理

      • head -5 /etc/passwd | awk 'BEGIN{RS=":"}{ print $1 }' 系统默认的行记录分隔符是换行符,RS=":",把行记录分隔符换成:
    • NR 和 FNR 行数

      • head -5 /etc/passwd | awk '{ print NR,$0 }' NR显示行号,$0显示行内容
      • awk '{ print NR,$0 }' /etc/hosts /etc/hosts
      • awk '{ print FNR,$0 }' /etc/hosts /etc/hosts
        对单个文件,使用NR和FNR没什么区别,若是接多个文件,NR会按顺序对内容一直排序,不区分文件;FNR是以先文件进行区分,再各自进行排序。
    • NF 字段数量,最后一个字段内容可以用 $NF 取出

      • head -5 /etc/passwd | awk 'BEGIN{FS=":"}{ print NF }' 输出每一行中有多少个字段

猜你喜欢

转载自www.cnblogs.com/chenri/p/12735256.html