首页 > 其他 > 详细

awk的涂鸦

时间:2016-01-29 16:07:57      阅读:168      评论:0      收藏:0      [点我收藏+]

awk太牛了,博大精深,学不透,学了不用,又忘。

所以花了一天,自己总结了基础,以后就当字典查(容易忘)。有不对的地方,忘大家指出。

[ganzl@cmdb ~]$ more /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

概念:

(字段,记录,就是行跟列的意思啦,我自己取的):

字段:上面/etc/passwd内有7个字段。以":"分割,$1就是root。$0,$n:当前记录,当前记录的第N个字段
记录:有两行记录

这4个概念比较重要:
NF:字段数量
NR:记录行数
$NF:当前行最后一个字段的内容
$NR:当前记录的第NR个内容
例子:

awk {FS=":"}NR==7||NF==8{print NF,$NF,NR,$NR} /etc/passwd  
awk -F: NR==2||NF==8{print NF,$NF,NR,$NR} /etc/passwd

FS:字段分割符号,默认是空格
RS:记录分割符号,默认是空格

例子:

技术分享
#!/bin/sh
exec <host.list
i=1
while read line
do
        if [ $i -eq 4 ];then
                echo -n "`echo $line|awk ‘{print $1}‘`">>tmp.host
        else
                echo -n "`echo $line|awk ‘{print $1}‘`,">>tmp.host
        fi
        ((i++))
done



df
df
df
df
dddddddddddddddddddddddddddddddd
3.txt
awk BEGIN{FS="\n";RS=""}{print $1,$2,$3} 3.txt  #不在同一行--(变成)-->同一行,同时空白记录--(变成)-->""

ORS:记录输出分隔符
OFS:字段输出分隔符
例子:

awk BEGIN{FS="\n";RS="";OFS="###";ORS="???"}{print $1,$2,$3} 3.txt

 

运算符


赋值运算符:
= += -= *= /= %= ^= **= 赋值语句

逻辑运算符:
||逻辑或 &&逻辑与

正则运算符:
~ !~ 匹配正则表达式和不关系运算符

关系运算符:< <= > >= != == 

算术运符:
+ - 加,减
* / & 乘,除与求余
+ - ! 一元加,减和逻辑非
^ *** 求幂
++ -- 增加或减少,作为前缀

三目运算符:? 

例子:
awk BEGIN{a=5;a+=4;print a} 
awk BEGIN{a=1;b=2;print(a>2||b<9)} 
echo|awk BEGIN{a="aaa1000dbbb"}a~/abc/{print "ok"}
awk BEGIN{a=11;if(a>9){print "ok"}} 
awk BEGIN{a=1;print a++,++a}
awk BEGIN{a="b";print a=="c"?"yes":"no"}

 

awk的正则

^ :行首定位符 /^root/ 匹配所有以 root 开头的行
$ :行尾定位符 /root$/ 匹配所有以 root 结尾的行
. :匹配任意单个字符 /r..t/
* :匹配 0个或多前导字符 (包括回车 ) /a*ool/ /a*ool/ 匹配0个或多a之后紧跟着ool的行,比如 ool ,aaaaool aaaaool 等
+ :匹配 1个或多前导字符 /a+b/ 匹配 1个或多个 a加 b的行,比如ab,aab 等
? :匹配 0个或 1个前导字符 /a?b/ 匹配 b或 ab 的行
[] :匹配指定字符组内的任意一个字符 /^[abc] 匹配以字母 a或 b或 c开头的行 开头的行
[^] :匹配不在指定字符组内任意一个字符 /^[^abc]/ 匹配不以字母 a或 b或 c开头的行
() :子表达式组合 /(rool)+/ 表示一个或多rool组合,当有一些 组合,当有一些 字符需要组合时,使用括号起来
| :或者的意思 /(root)|B/ 匹配 root 或者 B的行
\ :转义字符 /a \/\// 匹配 a//
~,!~:  匹配,不匹配的条 件语句 $1~/root/ 匹配第一个字段包含符root的所有 记
x{m} :x重复 m次 /(root){3}/ 注意这个括号
x{m,} :x重复至少 m次 /(root){3,}/
X{m,n} :x重复至少 m次,但不超过 n次

例子:
awk /tcpdump/{print $0,NR} /etc/passwd
ifconfig eth2|awk -F[" ":]+ NR==2{print $4,$6}|awk {print $1}
awk -F: $1=="root"{print $0} /etc/passwd


netstat -nal| awk /^tcp/{s[$NF]++}END{for(i in s)print i,s[i]}
统计web服务器访问IP:
awk {count[$1]++}END{for (ip in count){print ip,count[ip]}} /var/log/httpd/access_log             

 

awk的涂鸦

原文:http://www.cnblogs.com/shoug/p/5168954.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!