【发布时间】:2015-10-03 17:41:57
【问题描述】:
我有一个文件,其中包含 ID 号和一堆代表基因树的模式 例如:
021557 (sfra,(pdep,snud),((spal,sint),(sdro,(hpul,(sprp,afra)))));
005852 (snud,sfra,(pdep,(hpul,((afra,sprp),(sint,(spal,sdro))))));
023685 (sfra,snud,(pdep,(hpul,((sprp,(afra,spal)),(sdro,sint)))));
022020 (sfra,snud,(pdep,(hpul,(afra,(sprp,(sdro,(sint,spal)))))));
028284 (sfra,snud,(pdep,(hpul,(sprp,((sdro,sint),(spal,afra))))));
我对 (spal,afra) 的某个姐妹分类群分组感兴趣。如果树包含 (spal,afra),我想打印另一列的 ID。
如果只在上面的数据上运行,输出应该是: 023685 028284
我打算这样做:
awk '{if ($2 == "(spal,afra)") { print $1 } }'
但我意识到我要匹配的部分是在一堆其他字符中,并且在不可预测的位置......
所以我需要搜索
任意数量的小写字母或括号或逗号
(spal,afra)
任意数量的小写字母或括号或逗号或;
另外,我想我想知道其他顺序(afra,spal)的出现。但是如果我没记错的话,我打算运行单独的匹配,组合输出并使用 sort 和 uniq-c 做一些事情......我以后可能会自己弄清楚。
我对此有点陌生,我已经花了几个小时试图弄清楚一些事情。谢谢!
【问题讨论】:
-
[a-z(),]*(\(spal,afra\))[a-z(),;]* -
ID 是否在字符串中?如果没有,你为什么不能只搜索
\(spal,afra\)作为子字符串而不做任何其他事情?还是类似于\(spal,[a-z(),]*afra?哪里有分离? -
这是 awk 还是其他命令?我试图弄清楚如何将它作为工作 if 语句的一部分。
-
the file- 你的意思是多行吗? -
显示文件中的示例数据以及您的预期输出