我有一个名为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
第1列和第2列之间的分隔符是\ t。其他分隔符是逗号。 我有另一个文件,其中包含我感兴趣的行名称,名为fileB,如下所示:
col3
col1
...
两个文件都没有排序。我想从fileA中检索名称出现在fileB中的所有行。代码grep -f fileB fileA
完成了这项工作,但我认为它将搜索fileA中的所有文件,这需要很长时间。如何仅指定搜索fileA中的第1列?
答案 0 :(得分:1)
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)。
答案 1 :(得分:0)
没有排序的线性时间O(n)解。 (我没有测试,希望没有错字):
awk -F'\t' 'NR==FNR{a[$0]=7;next}a[$1]' fileB fileA
请注意,哈希表上的get
操作被视为O(1)