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'
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
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
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.
"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
Tags text-processing sed