unix sed remover nomes de adaptadores

0

Eu gostaria de enviar a saída para sed e remover os nomes dos adaptadores abaixo usando sed e agrupar os valores com vírgulas

ent13: 16 3979 ent12: 211 411 3978 ent11: 15 3977 ent10: 111 178 179 311 511 1719 3976
    
por satsensort 17.10.2018 / 09:03

4 respostas

0

Você pode usar um sed para primeiro remover o padrão que contém ent e, em seguida, colocar o espaçamento fora e substituí-lo por , como

sed 's/ent[0-9][0-9]: //g; s/ /,/g'
    
por 17.10.2018 / 09:12
1

Substitua os espaços por vírgulas, remova as palavras antes dos dois pontos, remova o espaço inicial, remova as vírgulas antes dos espaços:

sed 's/ /,/g; s/[^,]*:,/ /g;s/^ //;s/, / /g'

Saída:

16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
    
por 17.10.2018 / 09:14
0

Usando o GNU awk ou mawk (para suportar expressões regulares em RS ):

$ mawk -v RS='ent[0-9][0-9]: ' -v ORS=' ' -v FS=' ' -v OFS=',' '
    $1 != "" { $1=$1; print }
    END      { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976

Ou, de forma equivalente,

$ mawk 'BEGIN    { RS="ent[0-9][0-9]: "; ORS=FS=" "; OFS="," }
        $1 != "" { $1=$1; print } 
        END      { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976

Isso trata a única linha como um conjunto de registros separados por entNN: (onde N é algum dígito). Cada registro é lido como um conjunto de campos delimitados por espaço.

O teste $1 != "" pula o primeiro registro vazio (não há nada antes do primeiro separador de registro) e o bloco correspondente reformata o registro para saída simplesmente fazendo $1=$1 . Isso fará com que awk o reformate usando os valores ORS e OFS fornecidos.

    
por 17.10.2018 / 11:30
0

"Agrupar os valores com vírgulas" significa "separar os números de cada adaptador com uma vírgula de outros adaptadores"? Então, tente

sed 's/ *ent[0-9][0-9]: /, /g; s/^, //g' file
16 3979, 211 411 3978, 15 3977, 111 178 179 311 511 1719 3976
    
por 17.10.2018 / 12:49