Portável:
sed 's/\([^[:lower:]]*\) \(.*\) /,,/' < source.dat > output.csv
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:
csv
contém apenas as palavras inteiras que estão em maiúsculas
csv
contém o último campo de entrada (número) 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
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