笔记:awk(一) 不指定

root , 2007/08/21 22:00 , SHELL , 评论(0) , 阅读(5731) , Via 本站原创 | |
1.awk | -F field-separator| `cmd` input file
   awk -F : `cmd` input file
2.将awk命令插入一个文件,并使awk程序可以执行,然后用awk命令解释器作为脚本首行。
3.将所有awk命令插入一个单独文件
   awk -f awk-script-file inputfile
模式和动作
模式:两个特殊断 BEGIN和END
动作:实际动作大多在{}内指明
域和记录
浏览域表记为 $1,$2,......$n($1-$n称为域标识)

输出
1.抽取域
awk -F: '{print $1}' /etc/passwd
2.保存输出
awk -F: '{print $1}' /etc/passwd | tee user
awk -F: '{print $1}' /etc/passwd >user
3.使用标准输出
4.打印所有记录
awk -F: '{print $0}' /etc/passwd
5.打印单独记录
awk -F: '{print $1,$4}' /etc/passwd
6.打印报告头
awk -F: 'BEGIN {print "NAME\n"} {print $1}' /etc/passwd
7.打印结尾
awk -F: '{print $1} END {print "this is all users"}' /etc/passwd

条件操作符
1.匹配
awk '{if($1~/root/) print $0}' /etc/passwd   //{if($1~/root/) print}表示如果field1包含root,打印它//
2.精确匹配
使用等号 ==
3.不匹配
!~
4.小于
if($6 < $7)
5.小于等于
6.大于
7.设置大小写
awk '/[Rr]oot/' /etc/passwd
8.任意字符
awk '$~/^...a/' /etc/passwd      //^...a表示第四个字幕是a//
9.或关系匹配
'$0 ~/(root|ftp)/'
10.行首
awk '/^48/' input-file       // ^48(行首包含48)
11.AND &&
'{if ($1=="P.bunny" && $4=="") print $0}'
12.OR ||

内置变量:
ARCC                              命令行参数个数
ARGV                          命令行参数排列
ENVIRON                        支持队列中系统环境变量的使用
FNR                                 浏览文件的记录数
FS                                    置顶分隔符,等价于-F
NF                                    浏览记录的域的个数
NR                                    已读的记录数
OFS                                  输出域分隔符
ORS                                输出记录分隔符
RS                                   控制记录分隔符

设置输入域到变量名
awk -F '{name=$1; pach=$7; if(name~/root/) print name" pach is "pach}' /etc/passwd
域值比较操作
awk '{if($6<$7) print $0}' input-file
修改改数值域取值
awk ‘{if($1="NAME) $6=$6-1; print$1,$6,$7}' input-file
修改文本域
awk ’{if($1="J.Troll") ($1="J.L.Troll); print $1}' input-file
只显示修改改记录
awk ’{if($1="J.Troll") {$1="J.L.Troll; print $1}}' input-file
创建新的输入域
awk '{if($6>$7) {$8=$6-$7; print $1,$8}' input-file
增加列值
awk '(tot=$6) END {print"..................."tot}' input-file
文件长度相加
ls -l | awk '/^[^d]/ {print $9"\t $5} {tot+ =$5} END {print "tltal kb:"tot}'
Tags:
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]