我最近以编程方式处理大型数据文件(link)并决定从终端运行一些grep命令来提取特定行并检查我的程序是否正确处理数据。 我执行此grep的文件是制表符分隔并包含基因表达数据。每行包含一个基因名称,后跟几列数据。 我在终端中执行了以下grep命令:
grep IRX3 rma_CCLE_Expression_Entrez_2012-10-18.res
此处“IRX3”是基因名称,rma_CCLE ...是文件名。
此命令从文件中提取了正确的行,但删除了几个选项卡并删除了几列(有大约2000列,下面只显示了10个):
IRX3 79191_at 10.27105 P 9.802959 P 9.155978 P 3.944805 A 10.86381 P 11.219 P 8.894276 P 9.498839 P 10.97627 P 5.493518 A 10.12431 P 5.596724 P 11.97915 P 5.626475 A 8.586957 P 8.188652 P 11.46542 P 8.968493 P 8.015925 P 7.050888 P 10.34178 P 8.417319 P 8.865884 P 8.221919 P 6.207358 P 11.76088 P 7.162497 P 9.491752 P 4.784088 A 8.938905 P 5.123149 A 11.85545 P 10.13062 P 9.163952 P 5.67286 P 6.959234 P 12.05033 P 8.826333 P 5.065222 A 4.791684 8.042779 P 10.33864 P 7.781193 P 8.982947 P 4.262702 A 8.10075 P 5.307268 A 8.95283 P 10.13345 P 10.00931 P 8.48634 P 9.159968 P 8.849957 P 4.47576 ....
注意粗体文本,这两个值之间应该有一个字母(“A”和“P”),与其他列的模式相匹配。为什么grep会截断这些数据?我想把源头数据的完整性归咎于我的头发,但是当我通过我编写的Perl脚本以编程方式迭代文件时,数据很好(即两个指示值之间有一个字母)。
是什么给出了?
答案 0 :(得分:0)
使用grep -P
和你的perl regexp
这是一个赘述,顺便说一句,你应该检查手册页
与man grep