/ / Bash, aby wydrukować n-te słowo, jeśli istnieje określony ciąg - linux, bash

Bash, aby wydrukować N-ty wyraz, jeśli istnieje określony ciąg znaków - linux, bash

W dzienniku dostępu IHS muszę pobrać wiersz informacyjny wierszem iff, jeśli jest odpowiedź 401.

Poniżej znajduje się format i muszę przejść przez dziennik linia po linii pobrać konkretną liczbę przed właściwością użytkownika (która w tym przykładzie wynosi 123 lub 432) tylko wtedy, gdy w linii znajduje się 401 odpowiedzi.

coś takiego, jeśli n-te słowo linii wynosi 401, z n-tej kolumny chwyć numer i wydrukuj go.

 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

Odpowiedzi:

2 dla odpowiedzi № 1

Tokenizuj rekord białym znakiem lub znakiem „=” i wydrukuj 10 pole, jeśli 12 pole to 401.

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

0 dla odpowiedzi nr 2
perl -F"s|=" -lane "print $F[9] if $F[11] == 401" your_file.txt