如果存在特定字符串,则Bash打印第N个单词

时间:2013-08-14 02:47:14

标签: linux bash

在IHS访问日志中,如果有401响应,我需要逐行获取信息。

以下是格式,我需要逐行浏览以获取用户属性前面的特定数字(在此示例中为123或432)是在线找到401响应。

类似的东西,如果该行的第n个单词是401,则从第n列获取该数字并将其打印出来。

 myhost.com xxx.x.xxx.x aaa.aa.aa.aaa - - [14/Aug/2013:10:44:55 +1000] "GET /http/user=123 HTTP/1.1" 401 55 "-" "Apache-HttpClient/4.2.3 (java 1.5)" 21293 80 0
 myhost.com xxx.x.xxx.x aaa.aa.aa.aaa - - [14/Aug/2013:10:45:55 +1000] "GET /http/user=432 HTTP/1.1" 401 55 "-" "Apache-HttpClient/4.2.3 (java 1.5)" 21293 80 0

2 个答案:

答案 0 :(得分:2)

用空格或'='对记录进行标记,如果第12个字段为401,则打印第10个字段。

awk -F' |=' '$12 ~/401/{print $10}' inputFile

答案 1 :(得分:0)

perl -F'\s|=' -lane 'print $F[9] if $F[11] == 401' your_file.txt