数据是
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
我希望匹配两列之间的模式并尝试
awk '($3 == "Go:021") && ($4 == "Go:021")' trial.txt
仅列出
GLY6 GLY7 Go:021 Go:021
但是我想要包含匹配模式的其他列
GLY1 GLY21 Go:021 Go:022,Go:021
GLY5 GLY3 Go:012,Go:021 Go:021
GLY6 GLY7 Go:021 Go:021
答案 0 :(得分:3)
使用模式匹配
$ 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
答案 1 :(得分:1)
您需要这样做以消除冗余并避免错误匹配:
$ 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
保留标题行:
$ 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
答案 2 :(得分:0)
awk '/ Go:021 .* Go:021 /{print $0}' trial.txt