繁体   English   中英

基于第一列的grep

[英]grep based on first column

我有一个名为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)做得更好。

线性时间O(n)解决方案,无需排序。 (我没有测试,希望没有错字):

awk -F'\t' 'NR==FNR{a[$0]=7;next}a[$1]' fileB fileA

请注意,哈希表上的get操作被视为O(1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM