У меня есть два файла, как показано ниже, которые являются разделителями табуляции:ошибка AWK: не может выделить память
файл А
chr1 123 aa b c d
chr1 234 a b c d
chr1 345 aa b c d
chr1 456 a b c d
....
файл B
xxxx abcd chr1 123 aa c d e
yyyy defg chr1 345 aa e f g
...
Я хочу, чтобы присоединиться к двум файлы на основе 2 столбцов с «chr1», «123» и добавить первые два столбца из файла B в файл A. Это делается с использованием
awk 'NR==FNR{a[$3,$4]=$1OFS$2;next}{$7=a[$1,$2];print}' OFS='\t' fileb filea
выход:
chr1 123 aa b c d xxxx abcd
chr1 234 a b c d
chr1 345 aa b c d yyyy defg
chr1 456 a b c d
Однако с реальными данными, FILEB слишком огромна и она возвращает ошибку: «не может выделить 6400 байт памяти (не может выделить память)». Может ли кто-нибудь дать альтернативу этому, чтобы файл читался в меньших частях.
Если заказ не важен, а 'fileA' меньше, чем' fileB', попробуйте обратное. Сохраните 'fileA' в памяти и обработайте строку' fileB' на строку. – Birei
Если строки отсортированы, вы можете ограничить количество сохраненных ключей и значений. – konsolebox
@Birei Я хочу, чтобы информация была добавлена в файлA, поэтому ее нельзя отменить. – chas