linux - grep 基于第一列

标签 linux grep

我有一个名为 fileA 的大数据文件,格式如下

col1    0.1111,0.2222,0.33333,0.4444
col5    0.1111,0.2222,0.33333,0.4444
col3    0.1111,0.2222,0.33333,0.4444
col4    0.1111,0.2222,0.33333,0.4444

第一列和第二列之间的分隔符是\t。其他分隔符是逗号。 我有另一个包含我感兴趣的行名称的文件,称为 fileB,它看起来像:

col3
col1
...

两个文件都没有排序。我想从 fileA 中检索名称出现在 fileB 中的所有行。代码 grep -f fileB fileA 完成这项工作,但我认为它会搜索 fileA 中的所有文件,这需要很长时间。如何指定只搜索fileA中的第一列?

最佳答案

join <(sort -t $'\t' -k 1 fileA) <(sort -t $'\t' -k 1 fileB)

文件在 O(n.log(n)+p.log(p)) 中排序,然后在 O(n+p) 中合并,我认为我们不能做得更好。

编辑 好的,我们可以使用复杂度为 O(n+p) 的哈希表做得更好。

关于linux - grep 基于第一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23591927/

相关文章:

linux - 目录中的文件列表

c++ - 在 Debian 上为您自己的应用程序添加 SNMP 支持的最佳方式

linux - 如何制作脚本或程序来运行某些命令?

bash - 用于shell脚本中模式匹配的正则表达式并提取匹配部分

linux - 如何在 Linux 中的 makefile 中创建指向目录的链接?

c++ - 来自不兼容类型 c 的赋值

regex - 带 ^(插入符号)的 grep 在第一行不起作用

linux - 如何只对每个地址中的一个进行 grep。 Linux

regex - 一行中双字符的奇数个 (GREP)

regex - 如何在我的整个系统中进行查找和替换?