Bash 命令行grep删除制表符/截断数据/连接数据

Bash 命令行grep删除制表符/截断数据/连接数据,bash,command-line,grep,Bash,Command Line,Grep,我最近一直在以编程方式处理一个大数据文件(),并决定从终端运行一些grep命令来提取特定的行,并抽查我的程序是否正确地处理了数据。 我对其执行grep的文件是以制表符分隔的,包含基因表达数据。每一行包含一个基因名称,后跟几列数据。 我在终端中执行了以下grep命令: grep IRX3 rma_CCLE_Expression_Entrez_2012-10-18.res 这里的“IRX3”是一个基因名和RMAccle。。。是文件名 此命令从文件中提取了正确的行,但删除了几个选项卡并删除了一些列

我最近一直在以编程方式处理一个大数据文件(),并决定从终端运行一些grep命令来提取特定的行,并抽查我的程序是否正确地处理了数据。 我对其执行grep的文件是以制表符分隔的,包含基因表达数据。每一行包含一个基因名称,后跟几列数据。 我在终端中执行了以下grep命令:

grep IRX3 rma_CCLE_Expression_Entrez_2012-10-18.res 
这里的“IRX3”是一个基因名和RMAccle。。。是文件名

此命令从文件中提取了正确的行,但删除了几个选项卡并删除了一些列(共有~2000列,下面只显示了10列):

IRX3 79191_在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 p 8.015925 p 7.050888 p 10.34178P 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.1639552 P 5.67286 P 6.959234 P 12.05033 P 8.826333 P 5.065222A 4.791684 8.042779P 10.33864 P7.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“a”a“p”),与其他列的模式匹配。为什么grep要截断这些数据?我一直认为源数据的完整性是罪魁祸首,但当我通过编写的Perl脚本以编程方式迭代文件时,数据很好(即,两个指示值之间有一个字母)


给出了什么?

使用
grep-p
和您的perl regexp
这是解释性的,顺便说一句,您应该检查手册页

使用
mangrep

我假设您正在将输出重定向到一个文件。但是如果你让输出流到屏幕上,那么我认为你看到的是终端软件在被要求显示一个超大的行时出现了故障。所以
grep IRX3 file>outFile
并查看您的数据是否正确格式化。否则,另一种可能是源在输出流中放入了一些cntrl字符。搜索S.O.
od-c
。关于调试时髦数据的讨论已经很多了(是的,我知道它在perl中工作,所以如果您没有时间调试,继续使用perl?)祝您好运!谢谢@Sheller,你完全正确!问题是打印到屏幕上--将输出定向到文件解决了问题。奇怪的是,OSX中的终端软件会有这样一个bug,不过,谢谢你的帮助!抱歉,@glennjackman,Broad Institute网站(我从中获取数据)最近表现得很滑稽(),所以我一点也不奇怪。你应该把它上传到一个文件共享网站,你可以告诉它一个来自网络的文件,它会更快,每秒只有500 kb
grep IRX3 gene.res
outputs
4.791684 a 8.042779
对于我来说,那么是OS X和它的grep被破坏了,因为它在linux中一切正常。当我运行命令时,它被输出到屏幕上。顺便说一下,OSX中的终端软件运行bash或sh,只处理bash/sh之间的I/O