Chinaunix首页 | 论坛 | 博客
  • 博客访问: 444021
  • 博文数量: 85
  • 博客积分: 3580
  • 博客等级: 中校
  • 技术积分: 970
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-09 14:09
文章分类

全部博文(85)

文章存档

2011年(7)

2010年(78)

我的朋友
awk

分类: LINUX

2010-08-05 17:04:14

.awk 起源于sed和grep, 而不是ed
cat total.fe |awk '{gsub(/+ /,"+1 ");gsub(/- /,"-1 ");print $0}'> total.fe.nom 

.用法
awk  'instructions'  files
awk  -f script  files
 
 
.awk将每个输入行解释为一条记录而将那一行上的每个由分隔符分隔的部分做为一个字段(一个或多个连续的空格或制表符被看做是一个定界符)
 
.符号说明
 $0       整个输入的行
 $1       第一个字段
 $2       第二个字段
  .
  .
  .
 
 
.awk中的正则表达式
 1)
  .        除换行符外的任意单个字符(awk中.也能匹配换行符)
  *        匹配任意一个(或零个)在它前面的字符(包括由正则表达式指定的字符)
 
  [...]    匹配括号中的任意一个字符  (awk中也匹配换行符)
           -  用于表示字符的范围  [a-z]  [A-Z] [0-9]
           \  用于转义          
  [^...]   匹配括号中的字符和换行的任意一个字符
 
  ^        行首
  $        行尾
 
  \{n,m\}  匹配它前面某个范围内的单个字符出现的次数(含由正则表达式指定的字符)  
  \{n\}    匹配n次
  \{,n\}   最多匹配n次
  \{n,\}   最少匹配n次
 
  \        转义随后的特殊字符
 
 
 2)扩展的元字符(egrep和awk)
  +        匹配前面的正则表达式的一次或多次出现
  ?        匹配前面的正则表达式的一次或0次出现
  |        指定可以匹配其前面的或后面的正则表达式
  ()       对正则表达式分组
  {n,m}    匹配它前面某个范围内的单个字符出现的次数(含由正则表达式指定的字符)
 
 
 3)POSIX字符类
  [:alnum:]   可打印的字符(含空白字符)
  [:alpha:]   字母字符
  [:blank:]   空格和制表符
  [:cntrl:]   控制字符
  [:digit:]   数字
  [:graph:]   可打印的和可见的(非空格)字符
  [:lower:]   小写字符
  [:print:]   可打印的字符(含空白字符)
  [:punct:]   标点符号字符
  [:space:]   空白字符
  [:upper:]   大写字符
  [:xdigit:]  十六进制数字
 
 
.普遍存在的反斜杠
 \.        普通字符.
 \.nf      匹配以.开始的troff请求或宏
        troff中的字体转换是\f, 为搜索含这个请求的行,可以使用
 
 sed使用反斜杠将一组普通字符解释为元字符,如\(\)  \{\} \n 
 \n结构中的n表示1-9之间的一个数字
 
 
.示例
  打印每个含MA的行
  awk '/MA/'   file
  打印每个含MA的行的第一个字段
  awk '/MA/ {print $1 }'  file
 
  指定,为分隔符 并打印每个含MA的行的第一个字段
  awk  -F,   '/MA/ {print $1 }'  file
 
  匹配任意字符串
  .*
 
  80[234]?86      匹配8086 80286 80386 80486
 
  匹配除0-9外的任意字符
  [^0-9]
 
  每行前加http://
  awk '{$1=" $1}' test
 
  删除大小为0的文件
  find -type f -ls|awk '$7 == 0 {print $11}'|xargs -i rm {}
 
  删除字段行
  sed -i '/Normal_URL/d' 10-04-21_url.txt
  删除行中特定字符
  echo ' 123 456 789  ' | awk '{
  print "<" $0 ">";
  sub(/^[[:blank:]]*/,"",$0);print "[" $0 "]";
  sub(/[[:blank:]]*$/,"",$0);print "|" $0 "|";
  gsub(/[[:blank:]]*/,"",$0);print "/" $0 "/";
  }'
  < 123 456 789  >
  [123 456 789  ]
  |123 456 789|
  /123456789/
阅读(1336) | 评论(0) | 转发(0) |
0

上一篇:shell特殊变量

下一篇:Linux Kernal Map

给主人留下些什么吧!~~