0

我有一组字符串。可以说,(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 行外的所有行,因为第 2 行中的第 2 列,3def_Y 不在 list.txt 中指定的字符串列表中

我怎样才能在 awk 中做到这一点?请注意,test.txt 是一个大文本文件,将近 7GB。

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

4

1 回答 1

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

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

于 2013-01-20T13:48:47.460 回答