Problema de extração de dados com base em palavras maiúsculas

1

Eu tenho um arquivo de dados no seguinte formato:

source.dat ( Exemplo para fins de ilustração .)

ALBANIA Duck 1000
BELGIUM CHARLEROI Donald Duck 10234
CYPRUS J. Mickey 567

Estou procurando um script Linux (Bash, perl, whatever) para extrair as informações em csv format, com as regras fornecidas:

  • O campo primeiro em csv contém apenas as palavras inteiras que estão em maiúsculas
  • O campo em csv contém o último campo de entrada (número)
  • O campo em csv contém a parte intermediária restante

Assim, o resultado esperado deve ser:

output.csv

ALBANIA,Duck,1000
BELGIUM CHARLEROI,Donald Duck,10234
CYPRUS J.,Mickey,567
    
por fduff 29.07.2016 / 22:06

2 respostas

2

Portável:

sed 's/\([^[:lower:]]*\) \(.*\) /,,/' < source.dat > output.csv
    
por 29.07.2016 / 22:35
2

Se fizer diretamente como solicitado

sed -r 's/([[:upper:] .]+)\s+(.*)\s+([0-9]+)\s*$/,,/' file

Como podemos ver, o campo1 permanece no local para simplificar o script

sed -r 's/\s+(\w*[[:lower:]].*)\s+([0-9]+)\s*$/,,/' file

mesmo

sed -r 's/\s+(\w*[[:lower:]].*[^0-9])\s+/,,/' file
    
por 29.07.2016 / 22:31