我有两个大的制表符分隔文件 A.tsv 和 B.tsv,它们看起来像(标题不在文件中):
A.tsv:
ID AGE
User1 18
...
B.tsv:
ID INCOME
User4 49000
...
我想选择 A 中的 ID 列表,使得 10=< AGE <=20 并选择 B 中与列表匹配的行。我想使用 GNU 并行工具。我的尝试是两个步骤:
cat A.tsv | parallel --pipe -q awk '{ if ($3 >= 10 && $3 <= 20) print $1}' > list.tsv
cat list.tsv | parallel --pipe -q xargs -I% awk 'FNR==NR{a[$1];next}($1 in a)' % B.tsv > result.tsv
第一步有效,但第二步出现错误,例如:
awk: cannot open User1 (No such file or directory)
我怎样才能解决这个问题?即使 A.tsv 和 list.tsv 比内存大 2 到 3 倍,这种方法是否有效?