我有一个叫做file a的大数据文件,格式如下

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/

10-08 23:41