2016-11-24 87 views
0

我有数据的一个巨大的文件:提取列值包含在列表中的文件中的行?

datatable.txt

id1 england male 
id2 germany female 
... ... ... 

我有另一个数据列表:

indexes.txt

id1 
id3 
id6 
id10 
id11 

我想要从数据中提取所有行ble.txt其中id包含在indexes.txt中。

是否可以用awk/sed/grep来做到这一点?使用R或python的文件大小非常大并不方便。

+0

OP请从下面测试两个(awk和join)解决方案并发布执行时间? –

+0

您的示例输入文件中没有单个逗号,因此您的实际输入文件不是CSV或它是,但您选择向我们展示某些不同的出于某种原因。解决您的问题,使文本和输入与您是否有CSV文件一致。 –

回答

2

你只需要一个简单的awk作为

awk 'FNR==NR {a[$1]; next}; $1 in a' indexes.csv datatable.csv 
id1 england male 
  1. FNR==NR{a[$1];next}将在indexes.csv处理存储阵列的第一列至的 文件末尾内容的 条目。
  2. 现在就datatable.csv,我可以通过做 $1 in a相匹配的第一个文件的那些行,这将给我所有的行当前的文件,其 列$1的价值a[$1]是相同的其他文件。
0

也许我忽略了一些东西,但我建立两个测试文件:

a1: 

id1 
id2 
id3 
id6 
id9 
id10 

a2: 

id1 a 1 
id2 b 2 
id3 c 3 
id4 c 4 
id5 e 5 
id6 f 6 
id7 g 7 
id8 h 8 
id9 i 9 
id10 j 10 

join a1 a2 2> /dev/null

我得到的所有线柱相匹配一。

相关问题