我有一个名为 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/