我有一个庞大的数据文件:
datatable.txt
id1 england male
id2 germany female
... ... ...
我有另一个数据列表:
indexes.txt
id1
id3
id6
id10
id11
我想从 datatable.txt 中提取所有行,其中id包含在 indexes.txt 中。
是否可以使用awk / sed / grep执行此操作?使用R或python文件大小太大是不方便的。
答案 0 :(得分:2)
您只需要一个简单的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]
与其他文件中的相同。答案 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
我得到第一列匹配的所有行。