У меня есть два больших файла, разделенных табуляцией, A.tsv и B.tsv, они выглядят так (заголовок в файле отсутствует):
A.tsv:
ID AGE
User1 18
...
B.tsv:
ID INCOME
User4 49000
...
Я хочу выбрать список идентификаторов в A таким образом, чтобы 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 раза больше памяти?