用cut替换常规的awk字段读取

经常有很多日志类文件,经常会有截取每行的某些特定部分这样的需求。
这样就出现了awk这个工具。
awk是一个强大的文本处理工具,用于处理以某种方式分割,取某个或某些字段。
还可以进行脚本化,编写复杂的处理语句。一般结构如下:
#!/bin/awk -f
BEGIN{}
/pattern1/{statement1.}
/pattern2/{statement2.}
END{}
BEGIN指定在文本处理前的一些初始化参数,比如指定
对要处理的文本的分隔符,如以“=”作为分隔符:FS="="
其他类似参数还有OFS(指定输出的分隔符)。
还有就是定义一些初始化变量等。
pattern是指匹配的模式,支持正则表达式;
statement表示对匹配到的行的处理行为;
END表示在文本全部处理完后,做最后的总结。

上面介绍的是awk脚本的简单用法,命令行格式如下:
awk -F"=" '/pattern/{statement}'
具体含义不做具体说明了。

现在如有一段日志:
[21/Apr/2009:09:12:22 +0800] - ERROR<5897> - Schema  - conn=-1 p=-1 msgId=-1 - User error:  Entry "ProductId=3021823255,STBID=11040
21011200024C1013482,cn=Subscriber,l=ipauth,dc=iptv,dc=com", attribute "process" is not allowed
[21/Apr/2009:09:12:22 +0800] - ERROR<5897> - Schema  - conn=-1 p=-1 msgId=-1 - User error:  Entry "ProductId=1618391,STBID=11040210
11200024C1013482,cn=Subscriber,l=ipauth,dc=iptv,dc=com", attribute "process" is not allowed
[21/Apr/2009:09:12:22 +0800] - ERROR<5897> - Schema  - conn=-1 p=-1 msgId=-1 - User error:  Entry "ProductId=1647405,STBID=11040210
11200024C1013482,cn=Subscriber,l=ipauth,dc=iptv,dc=com", attribute "process" is not allowed
要取出其中的STBID=这个对应的那段字符串。
grep -h "process" errors | cut -d- -f1,8 | cut -d'"' -f1,2 | cut -d',' -f2 | cut -d'=' -f2 | sort  | uniq -c

请使用浏览器的分享功能分享到微信等