Я хотел бы пересечь серию маленьких файлов с относительно большим файлом.Следуя многим темам, связанным со стековым потоком, и после некоторых тестов я решил использовать эту функцию, которая была самой быстрой из моих данных:
for file1 in ./myfiles*
do
# Do other things to create file1 and file2
# Then
grep -f $file1 file2.txt | awk -F '\t' '{print $1}' > myResults_$file1.txt
done
, где file1 - это файл с одним столбцом от 50 до 100000 строк, а file2 - два-columns табуляции с разделителями ~ 1 миллион строк файла.
Пример :
file1
A
B
C
file2
A 1
B 2
C 3
Я запускаю команду в кластере с 1 потокоми 48 Гб оперативной памяти.Однако, как только я достигаю файла1 больше 10000 строк, он вылетает со следующей ошибкой:
slurmstepd: Job 3312063 exceeded memory limit (50359784 > 50331648), being killed
Может кто-нибудь объяснить мне, почему эта команда хранит так много в памяти и как я могу решить эту проблему?