En serio, esa expresión regular es ridícula.
En su lugar, escriba las cadenas, una por línea, en un archivo de texto simple y use
grep -v -w -F -f patternfile inputfile >outputfile
Esto solo generará líneas de inputfile
que no contengan las cadenas enumeradas en patternfile
. El indicador -F
hará que grep
trate las cadenas como cadenas y no como expresiones regulares (, esto probablemente también hará que use menos memoria ). El indicador -w
le asegura que coincidirá con palabras completas y no con subcadenas de palabras (, es decir, NA21130
solo coincidirá con NA21130
y no con GNA21130
oNA211301
).
Si desea buscar específicamente la cadena en la columna 5:
awk 'NR == FNR { pattern[$0] = 1; next } !pattern[$5]' patternfile inputfile >outputfile
Esto primero leerá las cadenas de patternfile
en una matriz, indexada por las cadenas. Luego leerá inputfile
y probará si el valor en la columna 5 es un índice en la matriz. Si no es así, se pasa la línea.
También tenga en cuenta que en un sistema POSIX, se garantiza que la longitud combinada máxima permitida de una línea de comando y el entorno actual (todas las variables de entorno y sus valores )es de al menos 4 KB. En la mayoría de los sistemas es más o mucho más que esto, pero debe estar preparado para recibir el mensaje de error Argument list too long
cuando intente ejecutar comandos como la línea de comando de 16 KB en la pregunta.