我有两个大的制表符分隔的文件A.tsv和B.tsv,它们看起来像这样(文件中没有标题):
A.tsv:
ID AGE
User1 18
...
B.tsv:
ID INCOME
User4 49000
...
我想在A表中选择年龄在10到20岁之间的ID列表,并选择在B表中匹配该列表的行。同时,我想使用GNU parallel工具。我的尝试分为两步:
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 的大小是内存的两到三倍,这种方法仍然有效吗?