Reputation: 1117
The data is
id ecid go1 go2
GLY1 GLY21 Go:021 Go:022,Go:021
GLY2 GLY32 Go:031,Go:023 Go:023,Go:021
GLY5 GLY3 Go:012,Go:021 Go:021
GLY6 GLY7 Go:021 Go:021
and I want to match patterns between two columns and tried
awk '($3 == "Go:021") && ($4 == "Go:021")' trial.txt
This only lists
GLY6 GLY7 Go:021 Go:021
But I would like other columns which contain the matching patterns as well
GLY1 GLY21 Go:021 Go:022,Go:021
GLY5 GLY3 Go:012,Go:021 Go:021
GLY6 GLY7 Go:021 Go:021
Upvotes: 1
Views: 42
Reputation: 203532
You need this to remove redundancy and avoid false matches:
$ awk 'BEGIN{p="(^|,)Go:021(,|$)"} $3~p && $4~p' file
GLY1 GLY21 Go:021 Go:022,Go:021
GLY5 GLY3 Go:012,Go:021 Go:021
GLY6 GLY7 Go:021 Go:021
To keep the header line:
$ awk 'BEGIN{p="(^|,)Go:021(,|$)"} (NR==1) || ($3~p && $4~p)' file
id ecid go1 go2
GLY1 GLY21 Go:021 Go:022,Go:021
GLY5 GLY3 Go:012,Go:021 Go:021
GLY6 GLY7 Go:021 Go:021
Upvotes: 1
Reputation: 67507
use pattern match instead
$ awk '$3~/Go:021/ && $4~/Go:021/' file
GLY1 GLY21 Go:021 Go:022,Go:021
GLY5 GLY3 Go:012,Go:021 Go:021
GLY6 GLY7 Go:021 Go:021
Upvotes: 3