Regex / problema de correspondência de padrões para extrair dados

2

Qual é a melhor maneira de remover distâncias nas seguintes linhas e no formato de saída de CDV. Isso pode ser feito razoavelmente facilmente na linha de comando? Eu gostaria de evitar ter que escrever um roteiro completo.

Greece 282 km, Macedonia 151 km, Montenegro 172 km, Kosovo 112 km
Central African Republic 797 km, Chad 1,094 km, Republic of the Congo 523

A saída seria:

Greece,Macedonia,Montenegro,Kosovo
Central African Republic,Chad,Republic of the Congo
    
por turtle 24.10.2012 / 15:40

3 respostas

3

Não faço ideia de que tipo, se o formato for esse cdv, mas parece que você só precisa remover os dígitos seguidos pela unidade de medida opcional e compactar os espaços depois das vírgulas restantes:

sed 's/ *[0-9]\+\(,[0-9]\+\)\?\( *km *\)\?//g;s/, \+/,/g' file.txt

Para melhor legibilidade, o mesmo com a expressão regular estendida (adequada para o GNU sed ):

sed -r 's/ *[0-9]+(,[0-9]+)?( *km *)?//g;s/, +/,/g' file.txt
    
por 24.10.2012 / 15:53
0

isso funcionou para mim com um conjunto de dados semelhante

sed -e 's/[0-9]*.[0-9]*.km//g' -e 's/\,\ /\,/g' <file>
    
por 24.10.2012 / 15:54
0

um pouco atrasado para a festa ... aqui está uma maneira de fazer isso com o GNU awk + sed

awk -F'[[:space:]]*[[:digit:],]+[[:space:]]*?km[[:space:],]*' 'BEGIN{OFS=","}{$1=$1;print}' | sed 's/,$//g'
    
por 24.10.2012 / 17:21

Tags