muri 发表于 2018-8-27 08:17:19

linux shell sed awk 命令(2)-awk

  linux shell sed awk 命令(2)-awk
  awk语法格式:
  awk [选项] -f program-file [ -- ] file ...
  选项:
  -F fs, --field-separator fs
  制定以fs作为输入行的分隔符(默认分隔符为空格或制表符)
  -v var=val, --assign var=val
  在执行过程以前,设置一个var值为val
  -f program-file, --file program-file
  从脚本文件中读取awk指令,以取代在命令参数中输入处理脚本
  -W compat, -W copyright, --compat, --traditional
  使用兼容模式运行awk,GUN扩展选项将被忽略
  -W dump-variables[=file], --dump-variables[=file]
  打印全局变量(变量,类型,值)到文件中,如果没有提供文件名,则自动输出至名为dump-variables文件中
  awk -W dump-variables=out.txt 'x=1 {print x}' test.txt
  eg:
  1.通过正则表达式/^$/匹配空白行
  awk '/^$/ {print "Blank line"}' eth0
  2.打印包含主机名的行,没有指定动作指令.默认动作为打印
  awk '/HOSTNAME/' /etc/sysconfig/network
  3.指定脚本-f
  (1)awk.sh内容如下:
  /^$/ {print "Blank line"}
  (2) awk -f awk.sh eth0
  Blank line
  Blank line
  Blank line
  Blank line
  Blank line
  记录与字段
  echo hello world abc | awk '{print $1,$2,$3}'
  hello world abc
  echo hello world abc | awk '{print $0}'
  hello world abc
  echo hello world abc | awk '{print NF}'
  3
  echo hello world abc | awk '{print $NF}'
  abc
  字段分隔符
  awk -F:'{print $1}' /etc/passwd
  awk 'BEGIN {FS=":"} {print $1}' passwd
  //指定多个分隔符
  echo 'hello the:world,!' | awk 'BEGIN {FS="[:, ]"} {print $1,$2,$3,$4}'
  内置变量
  ARGC    命令行参数
  FILENAME    当前输入文档名称
  FNR      当前输入文档
  NR      输入流的当前记录编号
  NF      当前记录字段数
  FS      字符分割符
  OFS      输出字段分隔符,默认空格
  ORS      输出记录分隔符,默认为换行符\n
  RS            输入记录分隔符,默认为换行符\n
  表达式与操作符
  四则运算 + - * /
  % 取余    ^    幂运算 
  自加自减
  ++ --
  ~匹配 !~不匹配
  echo "test" | awk 'x=2 {print x+3}'
  awk -F: '$1~/root/ {print $3}' /etc/passwd   //打印root的ID号
  awk -F: '$3>500 {print $1}' /etc/passwd //列出ID号大于500的用户名
  awk语法规则
  if (表达式)
  动作
  else
  动作
  if (表达式) 动作;else 动作
  eg:
  //判读sda4容量小于20MB时报警,否则显示ok
  df -h | grep "sda4"| awk '{if ($4
页: [1]
查看完整版本: linux shell sed awk 命令(2)-awk