我有一个叫做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/