Awk 列之间的匹配模式
数据是Awk 列之间的匹配模式,awk,sed,Awk,Sed,数据是 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
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
改用模式匹配
$ 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
改用模式匹配
$ 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
awk'/Go:021.*.Go:021/{print$0}'trial.txtawk'/Go:021.*Go:021/{print$0}'trial.txt
$ 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
您需要这样做来删除冗余并避免错误匹配:
$ 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
这可能更好:这可能更好: