
Tengo un archivo que contiene líneas con varias cadenas alfanuméricas que están separadas por espacio-guión-espacio. Sin embargo, hay líneas en las que solo hay un valor alfanumérico y un separador, pero falta el otro valor de cadena. Ejemplo:
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
DK0060056323-DKK -
DK0060186294-DKK -
Las dos últimas líneas del ejemplo anterior carecen de una cadena alfanumérica en el lado derecho del separador y quiero eliminarlas. Intenté usar la siguiente expresión awk:
awk '!/* - /' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt
Quiero !/* - /
decir "busque un patrón donde después de cualquier carácter (*) haya un espacio-guión-espacio (-) y nada después, y si no se encuentra dicho patrón (!)", mueva el resto de las líneas a temporal. txt y reemplace el contenido de sourcefile.txt con el contenido de temp.txt. Sin embargo, cuando ejecuto el script awk anterior, no sucede nada con el contenido de sourcefile.txt; todo sigue igual. Tampoco me sale ningún error. ¿Qué podría estar mal aquí? Dadas las líneas de ejemplo anteriores, el resultado deseado después de ejecutar el script awk debería verse así:
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
Respuesta1
Para imprimir líneas que terminan en un carácter alfanumérico es simplemente:
$ awk '/[[:alnum:]]$/' file
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
Respuesta2
Aún más simple:
awk '$3' inputfile
Esta es la abreviatura de awk '$3!=""'
, que es la abreviatura de awk '$3!=""{print}'
, que es la abreviatura deawk '$3!=""{print $0}'
Para el registro:
sed /-$/d
Probablemente sea más rápido, e grep -ve '-$'
incluso más rápido aún.
Respuesta3
Gracias a la sugerencia de @guillermo chamorro pude lograr el resultado deseado modificando mi script de la siguiente manera:
awk '!/^.* -$/' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt
Gracias guillermo.