Para sua entrada de amostra:
$ cat /tmp/data
| 2015-08-21 - 10:15 | jones | view | Main.Home | | 172.29.192.106 |
| 2015-08-21 - 10:31 | wilson | view | Main.Home | | 172.19.6.107 |
| 2015-08-21 - 11:40 | smith | resetpasswd | wilson | Mozilla | 172.19.15.105 |
| 2015-08-21 - 11:41 | james | view | Main.ChangePassword | | 172.19.15.102 |
| 2015-08-21 - 11:41 | james | changepasswd | wilson | | 172.19.15.102 |
| 2015-08-21 - 11:41 | james | view | Main.Home | | 172.19.15.102 |
| 2015-08-22 - 08:31 | doe | view | Main.Info | | 172.19.6.103 |
Você pode usar o awk:
$ awk '-F|' 'BEGIN { OFS = "|" }{ if ($3 ~ "wilson") { print } }' /tmp/data
| 2015-08-21 - 10:31 | wilson | view | Main.Home | | 172.19.6.107 |
Em vez de $3 ~ "wilson"
, você também pode usar $3 == " wilson "
, supondo que sempre haverá espaços ao redor do campo.
Para responder à sua pergunta de acompanhamento, você pode envolvê-la em um script Bash:
$ cat foo.sh
#/bin/bash
names="$(cat patlist.txt)"
for name in ${names}; do
awk -F'|' '$3 == " '"${name}"' "' /tmp/data
done
$ cat patlist.txt
wilson
jones
$ bash foo.sh
| 2015-08-21 - 10:31 | wilson | view | Main.Home | | 172.19.6.107 |
| 2015-08-21 - 10:15 | jones | view | Main.Home | | 172.29.192.106 |