将模式限制为指定的字符串

时间:2013-01-20 13:14:58

标签: awk

我有一组字符串。可以说,(list.txt)它们是:

 1abc_A
 2pqr_X
 4ghi_Z

我还有一个文本文件(test.txt),如下所示:

1abc_A    2pqr_X    0.55       0.87
2pqr_X    3def_Y    0.21       0.24
4ghi_Z    1abc_A    0.98       0.75
2pqr_X    4ghi_Z    0.99       0.76
2pqr_X    2pqr_X    1.00       1.00

我只需要从test.txt获取那些行,这样第1列和第2列中的字符串属于list.txt中包含的字符串

在这种情况下,我的输出如下:

1abc_A    2pqr_X    0.55       0.87
4ghi_Z    1abc_A    0.98       0.75
2pqr_X    4ghi_Z    0.99       0.76
2pqr_X    2pqr_X    1.00       1.00

,即test.txt中的所有行除了第二行,因为第二行中的第2列,3def_Y不在list.txt中指定的字符串列表中

我怎么能在awk中这样做? 请注意,test.txt是一个大文本文件,大约7GB。

解决此问题的最快方法是什么? 请帮忙。

1 个答案:

答案 0 :(得分:3)

awk 'NR==FNR{a[$0];next} ($1 in a) && ($2 in a)' list.txt test.txt

将list.txt的内容存储为数组的索引,然后逐行test.txt检查它的第1和第2个字段都是该数组的索引。适用于任何大小的test.txt,因为它不会在内存中存储任何test.txt。