linux - 在终端中搜索文本文件

标签 linux unix awk grep

嗨,这对很多人来说可能是一个基本问题,但它已经占用了我几个小时的时间。

我有一个大数据文件作为运行脚本的输出。该文件包含大约 15 列和大约 100,000 行。我希望搜索文件并在第 4、5、6、7 和 8 列中检查特定值(和字符串)。我知道我可以单独剪切列并查看它们或在 less 命令中使用前向搜索(“/”)。这里的问题是第二和第三列也将包含我搜索的值(几乎每隔一行)。我只需要第 4、5、6、7 和 8 列中的值来解释结果,而且我还需要查看相邻的列。我怎样才能做到这一点?我不想使用任何外部语言,例如 R、python 或 perl,我正在寻找使用命令行命令的解决方案。

我使用以下命令查看文件;

bzcat myfile.tsv.bz2 | column -t | less -S 

任何输入将不胜感激。

数据的示例; (是特定区间内的生物数据)

col1 strt  end Sample1 Sample2 Sample3 Sample4 Sample5 p.val1 p.val2 .   ID 

ABC  1100  1200  2        2       2       2       3      NA    0.27403   PLD4     
BCD  1200  1300  4        3       4       4       2    0.88831 0.37662 CYP46A1
CDE  1300  1400  2        1       4       2       1    0.77922 0.00519   CEBPE
DEF  1400  1500  6        4       4       4       4    0.88182 NA        BRCA
EFG  1500  1600  2        6       8       10      3    0.00779 0.01558   BRCA

假设我想查看整个文件并限制我只搜索第 4、5、6、7 和 8 列。 ~M

最佳答案

直到您编辑您的问题以提供更多信息,这是您想要的吗?:

$ awk '$4==1 && $6==4' file
BCD  2    4  1     1    4    2

以上是针对您发布的示例输入文件运行的:

$ cat file
col1 srt end col4 col5 col6 col7
ABC  1    2  1     1    5    2
BCD  2    4  1     1    4    2
CDE  4    6  6     5    2    5
DEF  6    8  4     4    4    4
EFG  8   10  4     4    3    4

鉴于您在下面的评论,这是您想要的吗:

$ awk '{print $0 ($4==1 && $6==4 ? " <--- HERE I AM!" : "")}' file
col1 srt end col4 col5 col6 col7
ABC  1    2  1     1    5    2
BCD  2    4  1     1    4    2 <--- HERE I AM!
CDE  4    6  6     5    2    5
DEF  6    8  4     4    4    4
EFG  8   10  4     4    3    4

关于linux - 在终端中搜索文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30784226/

相关文章:

c - TCP 操作超时

Bash:仅获取第二行和最后一行输出(ls -lrS)

android - "-fpermissive"和 "include "在 linux c 编译器中不起作用

linux - 我用 0 初始化数组时做错了什么?

shell - 通过 SSH 执行脚本并获取输出?

linux - 如何使用 du 从 stdin 获取路径并计算总大小?

linux - 如何匹配文件中包含某些单词的前三行

bash - 如何在 bash 中仅替换单个换行符?

linux - 在 Linux box 中使用 IE 启动器在 grunt 中运行 Karma

linux - Bare Bones linux源代码