awk 命令

来源:互联网 发布:数据录入员工作总结 编辑:程序博客网 时间:2024/05/06 14:56

一.调用awk方式

1.         命令行方式awk [-F filed-separator] ‘commands’ input-files

2.         将所有awk命令插入一个文件,并使awk程序可执行

3.         将所有awk命令插入一个单独文件,调用:

awk –f awk-script-file input-files

二.保存输出

1.         $ awk ‘{print $0}’ grade.txt >wow 直接将结果重定向到wow

2.         $ awk ‘{print $0}’ grade.txt | tee grade1.txt  将结果重定向到grade1.txt同时打印到屏幕上

三.输入

四.打印

1$ awk ‘{print $0}’ grade.txt        打印所有记录

         2$ awk ‘{print $1,$4}’ grade.txt  打印单独(第一域和第四域)

         3$ awk ‘BEGIN {print “Name/n-------------”} {print $1,$4}’ grade.txt 打印报告头

4$ awk ‘BEGIN {print “Name/n-------------”} {print $1,$4} END {“end of report”}’ grade.txt    打印信息尾

五.条件操作符

         1$ awk ‘$0 ~/Brown/’ grade.txt  匹配模式Brown,并打印匹配行

         2$ awk ‘{if($3 ~/48/) print $0}’ grade.txt在第三域中精确匹配48,并返回记录

         3$ awk ‘$0 !~/Brown/’ grade.txt 不匹配模式Brown,并打印匹配行

         4$ awk ‘{if ($6<$7) print $0 “$1 Try better at the next comp”}’ grade.txt 小于

         5$ awk ‘{if ($6>=$7) print $1 ”}’ grade.txt 大于等于

6$ awk ‘/[Gg]reen/’ grade.txt 设置大小写

7$ awk ‘$1 ~/^…a/’ grade.txt 抽取名字,为任意字符

         8$ awk ‘$0 ~/(Yellow | Brown)/’ grade.txt 关系匹配,抽取YellowBrown的记录

9$ awk ‘{if ($1==”A” && $4==”B”) print $0}’ grade.txt  AND操作

         10$ awk ‘{if ($1==” Yellow” || $4~/ Brown/) print $0}’ grade.txt   OR操作

六.内置变量

1$ awk ‘END {print NR}’ grade.txt  NR打印记录个数

         2$ awk ‘{print NF,NR,$0}’ grade.txt  NF显示每条记录有多少个域

七.操作符

1$ awk ‘{name=$1;belts=$4;if (belts ~/Yellow/) print name “is belt” belts}’ grade.txt  设置域名操作:name=$1;belts=$4

2$ awk ‘{if ($6<27) print $0}’ grade.txt 域值比较操作$6<27

3$ awk ‘BEGIN {BASELINE=”27”} {if ($6<BASELINE) print $0}’ grade.txt 给数字赋予变量名,意义同上

         4$ awk ‘{if ($1==”M.Tansley”) $6=$6-1;print $0}’ grade.txt 修改域数值

         5$ awk ‘{if ($1==”M.Tansley”) {$1=” M.M.Tansley” ;print $1}}’ grade.txt

6$ awk ‘BEGIN {print “Name/t Difference”} {if ($6<$7) {$8=$7-$6;print $1,$8}}’ grade.txt 创建新输出域$8

         7$ awk ‘{(tot+=$6)};END{print “total points:” tot}’ grade.txt $6域的值相加并输出结果

八.内置字符串

        

字符串函数

含义

举例

gsub(r,s)

在整个$0中用s替代r

$ awk ‘gsub(/4842/,4899) {print $0}’ grade.txt

gsub(r,s,t)

在整个t中用s替代r

 

index(s,t)

返回s中字符串t的第一个位置

$ awk ‘BEGIN {print index(“Bunny”,”ny”)}’ grade.txt

length(s)

返回s长度

$ awk ‘$1==”J.Troll” {print length($1)’ $1}’ grade.txt

match(s,r)

测试s是否包含匹配r的字符串

$ awk ‘$1==”J.Lulu”’ {print match($1,”u”)} grade.txt

split(s,a,fs)

fs上将s分成序列a

$ awk ‘BEGIN {print split(“12#45”,myarray.”#”)}’ grade.txt

sprint(fmt,exp)

返回经fmt格式化后的exp

 

sub(r,s)

$0中最左边最长的子串代替s

 

substr(s,p)

返回字符串s中从p开始的后缀部分

$ awk ‘$1==”L.Tansley” {print substr($1,3)}’ grade.txt

substr(s,p,n)

返回字符串s中从p开始长度为n的后缀部分

$ awk ‘$1==”L.Tansley” {print substr($1,1,5)}’ grade.txt

 

原创粉丝点击