AWK: como remover certas linhas que NÃO contêm determinado padrão?

AWK: como remover certas linhas que NÃO contêm determinado padrão?

Eu tenho um arquivo que contém linhas com várias strings alfanuméricas separadas por espaço-traço-espaço. No entanto, existem linhas onde apenas um valor alfanumérico e um separador estão presentes, mas o outro valor da string está faltando. Exemplo:

MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613
DK0060056323-DKK -
DK0060186294-DKK -

As duas últimas linhas do exemplo acima não possuem sequência alfanumérica no lado direito do separador e quero removê-las. Tentei usar a seguinte expressão awk:

awk '!/* - /' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt

Com !/* - /isso quero dizer "procure um padrão onde após qualquer caractere (*) haja um espaço-traço-espaço (-) e nada depois, e se esse padrão não for encontrado (!)" então mova o restante das linhas para temp. txt e substitua o conteúdo sourcefile.txt pelo conteúdo temp.txt. No entanto, quando executo o script awk acima, nada acontece com o conteúdo do sourcefile.txt - tudo permanece o mesmo. Também não recebo nenhum erro. Oque pode estar errado aqui? Dadas as linhas de exemplo acima, a saída desejada após a execução do script awk deve ser semelhante a esta:

MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613

Responder1

Para imprimir linhas que terminam em um caractere alfanumérico é simplesmente:

$ awk '/[[:alnum:]]$/' file
MN_L_DAX-NORDNET_D36 - DK0060975886
MN_L_DAX-NORDNET_D35 - DK0060975613

Responder2

Ainda mais simples:

awk '$3' inputfile

Esta é uma abreviação de awk '$3!=""', que é uma abreviação de awk '$3!=""{print}', que é uma abreviação deawk '$3!=""{print $0}'

Para registro:

sed /-$/dé provavelmente mais rápido, e grep -ve '-$'ainda mais rápido.

Responder3

Graças à sugestão do @guillermo chamorro consegui atingir o resultado desejado modificando meu script da seguinte forma:

awk '!/^.* -$/' sourcefile.txt > temp.txt && mv temp.txt sourcefile.txt

Obrigado Guilherme.

informação relacionada