Sério, essa expressão regular é ridícula.
Em vez disso, escreva as strings, uma por linha, em um arquivo de texto simples e use
grep -v -w -F -f patternfile inputfile >outputfile
Isso só exibirá linhas de inputfile que não contenham as strings listadas em patternfile . O -F flag fará com que grep trate as strings como strings e não como expressões regulares (isso provavelmente fará com que use menos memória também). O -w sinalizador garante que você corresponderá palavras inteiras e não substrings de palavras (ou seja, NA21130 corresponderá apenas a NA21130 e não GNA21130 ou NA211301 ).
Se você quiser procurar especificamente a string na coluna 5:
awk 'NR == FNR { pattern[$0] = 1; next } !pattern[$5]' patternfile inputfile >outputfile
Isso primeiro lerá as strings de patternfile em uma matriz, indexada pelas strings. Em seguida, ele lerá inputfile e testará se o valor na coluna 5 é um índice na matriz. Se não for, a linha é passada.
Observe também que em um sistema POSIX, o comprimento combinado máximo permitido de uma linha de comando e o ambiente atual (todas as variáveis de ambiente e seus valores) têm garantia de pelo menos 4 KB. Na maioria dos sistemas é mais ou muito mais do que isso, mas você deve estar preparado para receber a mensagem de erro Argument list too long ao tentar executar comandos como a linha de comando de 16 KB na pergunta.