Se você não é muito exigente com o espaço em branco, você faz isso com duas regras do awk como esta:
awk '$1 { printf "\n" $0 } !$1 { printf OFS $7 }' FS=, OFS='|' infile
Isso deixa uma linha vazia na cabeça da saída e erra uma no final. Para corrigir isso, adicione if
e END
cláusulas:
awk '$1 { if(NR>1) printf "\n"; printf $0 } !$1 { printf OFS $7 } END { printf "\n" }' FS=, OFS='|' infile
Saída:
ABC,SSSD,12345,NSS,12345,xxx,TS11|TS21|TS22|BS26|GPRS
ABC,SSSD,12356,NSS,12356,xxx,TS11|TS21|TS22|GPRS|BS26
Editar - observe sobre% em $ 0
Como Glenn observou nos comentários, se suas linhas contiverem %
, será mais seguro chamar printf
com uma string de formato, por exemplo:
awk '$1 { if(NR>1) printf "\n"; printf "%s", $0 } !$1 { printf OFS"%s", $7 } END { printf "\n" }' FS=, OFS='|' infile