提取列中包含列值的文件中的行?

时间:2016-11-24 11:39:10

标签: awk sed grep

我有一个庞大的数据文件:

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文件大小太大是不方便的。

2 个答案:

答案 0 :(得分: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]与其他文件中的相同。

答案 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

我得到第一列匹配的所有行。