
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.