shell脚本专家指南--单行文本处理awk

来源:互联网 发布:西科软件java 编辑:程序博客网 时间:2024/05/28 19:23

sed,awk,grep是unix主要的文本处理工具

一.awk
 显示域
  VAR="The quick brown fox jumped over the lazy dog"
  echo $VAR|awk '{print $1,$2}'
 #指定域分隔符
  echo $VAR|awk -Fo '{print $1}'

 grep命令能返回给定串匹配的行
 awk能返回特定域中与特定值匹配的行

 #显示/etc/hosts文件中第二个域等于casper串的所有行
  awk '$2 == "casper" {print $0}' /etc/hosts

 #查找以127开始,或者172开始的记录
  "~" 模式匹配操作符
  "!~" 否定模式匹配操作符
  awk '$1 ~ /^127|^172/ {print $0}' /etc/hosts
 #确定域的数目
  echo $VAR|awk '{print NF}'
 #确定最后一个域
  echo $VAR|awk '{print $NF}'
 #确定倒数第二个域
  echo $VAR|awk '{print $NF}'

给awk传送变量:
 在运行时,次知道所需要的域
 Thecount=3
 echo $VAR|awk -v counter=$Thecount  '{print $counter}'
 -v 是对变量赋值的比较新的选项,程序要求移植时,需要下面技巧
 Thecount=3
 echo $VAR|awk '{print $counter}'  counter=$Thecount
 在一定条件下面给awk传送的变量
 第二个域为quick 才输出第三个域
 echo $VAR|awk -v NODE="quick" '$2 == NODE{print $3}'
显示域的范围
 第三个开始,以NF为结束
 echo $VAR|awk '{for(i=3;i<=NF;i++) {printf "%s ",$i};print ""}'
 按输入参数范围
 echo $VAR|awk '{for(i=3;i<='$send';i++) {printf "%s ",$i}}'
确定串的长度
 echo $VAR | awk '{print length}'
 使用expr确定串长度
 expr length "$VAR"
显示一个子串
 awk内嵌函数
  substr(string,子串第一个字符所在位置,子串的字符数)
 echo $VAR | awk '{print substr($3,2,3)}'
 expr显示一个子串
 expr substr "$VAR" 12 4

 

原创粉丝点击