我有数据的一个巨大的文件:提取列值包含在列表中的文件中的行?
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的文件大小非常大并不方便。
我有数据的一个巨大的文件:提取列值包含在列表中的文件中的行?
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的文件大小非常大并不方便。
你只需要一个简单的awk
作为
awk 'FNR==NR {a[$1]; next}; $1 in a' indexes.csv datatable.csv
id1 england male
FNR==NR{a[$1];next}
将在indexes.csv
处理存储阵列的第一列至的 文件末尾内容的 条目。datatable.csv
,我可以通过做 $1 in a
相匹配的第一个文件的那些行,这将给我所有的行当前的文件,其 列$1
的价值a[$1]
是相同的其他文件。也许我忽略了一些东西,但我建立两个测试文件:
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
我得到的所有线柱相匹配一。
OP请从下面测试两个(awk和join)解决方案并发布执行时间? –
您的示例输入文件中没有单个逗号,因此您的实际输入文件不是CSV或它是,但您选择向我们展示某些不同的出于某种原因。解决您的问题,使文本和输入与您是否有CSV文件一致。 –