awk抽取域 不输出到屏幕上
oracle@ser168:~/qilin/demo> awk '{print $1,$2,$7}' grade.txt >wow_3.txt
awk抽取域 输出到屏幕上
oracle@ser168:~/qilin/demo> awk '{print $1,$4}' grade.txt | tee delete_mde_and_die
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
打印所有记录
oracle@ser168:~/qilin/demo> awk '{print $0}' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
打印报告头
oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name belt\n-------------------"} {print $1"\t"$4}' grade.txt
name belt
-------------------
M.Tansley Green
J.Lulu green
P.Bunny Yellow
J.Troll Brown-3
L.Tansley Brown-2
打印信息尾
oracle@ser168:~/qilin/demo> awk 'BEGIN {print "name\n-----"} {print $1} end {"end-of-report"}' grade.txt
name
-----
M.Tansley
J.Lulu
P.Bunny
J.Troll
L.Tansley
匹配 如果记录包含模式b r o w n,就打印它:
oracle@ser168:~/qilin/demo> awk '$0 ~ /Brown/' grade.txt
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
精确匹配--假定要使字符串精确匹配,比如说查看学生序号 4 8,文件中有许多学生序号包含 4 8,如果在f i e l d - 3中查询序号4 8,a w k将返回所有序号带4 8的记录:
oracle@ser168:~/qilin/demo> awk '{if($3~/48/) print $0}' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
精确匹配--为精确匹配4 8,使用等号= =,并用单引号括起条件。例如 $ 3 = =“4 8” ,这样确保只有4 8序号得以匹配,其余则不行
oracle@ser168:~/qilin/demo> awk '$3=="48" {print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
不匹配--有时要浏览信息并抽取不匹配操作的记录,与 ~相反的符号是!~,意即不匹配。像原来使用查询b r o w n腰带级别的匹配操作一样,现在看看不匹配情况。表达式 $0 !~/brown/,意即查询不包含模式b r o w n腰带级别的记录并打印它
oracle@ser168:~/qilin/demo> awk '$0 !~/Brown/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
P.Bunny 02/99 48 Yellow 12 35 28
大于
oracle@ser168:~/qilin/demo> awk '{if ($6>$7) print $1}' grade.txt
P.Bunny
L.Tansley
小于等于
oracle@ser168:~/qilin/demo> awk '{if ($6 <=$7) print $1}' grade.txt
M.Tansley
J.Lulu
J.Troll
设置大小写
oracle@ser168:~/qilin/demo> awk '/[Gg]reen/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
J.Lulu 06/99 48317 green 9 24 26
设置大小写--为查询大小写信息,可使用[ ]符号。在测试正则表达式时提到可匹配[ ]内任意字符或单词,因此若查询文件中级别为g r e e n的所有记录,不论其大小写,表达式应为‘ / [ G g ] r e e n /: ’
oracle@ser168:~/qilin/demo> awk '$1~/^...a/' grade.txt
M.Tansley 05/99 48311 Green 8 40 44
L.Tansley 05/99 4712 Brown-2 12 30 28
或关系匹配--为抽取级别为y e l l o w或b r o w n的记录,使用竖线符 |。意为匹配 | 两边模式之一。注意,使用竖线符时,语句必须用圆括号括起来。
oracle@ser168:~/qilin/demo> awk '$0~/(Yellow|Brown)/' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
11. AND--打印记录,使其名字为‘ P. B u n n y且级别为 Ye l l o w,使用表达式 ( $ 1 = = " P. B u n n y " & &$ 4 = = " Ye l l o w " ),意为& &两边匹配均为真。完整命令如下:
oracle@ser168:~/qilin/demo> awk '{if ($1=="P.Bunny" && $4=="Yellow")print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
12. Or--如果查询级别为Ye l l o w或B r o w n,使用或命令。意为“ | |”符号两边的匹配模式之一或全部为真。
oracle@ser168:~/qilin/demo> awk '{if ($4=="Yellow" || $4~/Brown/) print $0}' grade.txt
P.Bunny 02/99 48 Yellow 12 35 28
J.Troll 07/99 4842 Brown-3 12 26 26
L.Tansley 05/99 4712 Brown-2 12 30 28
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20976446/viewspace-684538/
,如需转载,请注明出处,否则将追究法律责任。