Se os dados de entrada estiverem em um arquivo chamado input
:
$ awk -F, '/CPU0/{for (i=1; i<=NF;i++) {a[i]=$i};next} {for(i=1;i<=NF-1;i++){printf a[i]"#"$i","}; print a[NF]"#"$NF}' input
GenuineIntel#GenuineIntel,Intel(R) Xeon(R) CPU E5-2687W 0 @ 3.10GHz#Intel(R) Xeon(R) CPU E5-2687W 0 @ 3.10GHz,CPU0#CPU1,64#64,EM64T Family 6 Model 45 Stepping 7#EM64T Family 6 Model 45 Stepping 7,(null)#(null),3093#3093,0#0
Tomando o comando awk
uma parte de cada vez:
-
-F,
Isso diz a
awk
para usar uma vírgula como separador de campo de entrada. -
/CPU0/{for (i=1; i<=NF;i++) {a[i]=$i};next}
Isso começa com
/CPU0/
, que é um seletor de endereço que seleciona a primeira linha (a da CPU0). Para essa linha, armazena todos os valores de campo na matriza
. O comandonext
informaawk
para pular para a próxima linha. -
for(i=1;i<=NF-1;i++){printf a[i]"#"$i","}
Isso diz
awk
para imprimir a colunai
para a primeira linha, seguida por um hashmark seguido pela colunai
da segunda linha, seguida por uma vírgula. Ele faz isso para todos os campos, exceto o último.Como
printf
é usado, nenhum caractere de nova linha é impresso. -
print a[NF]"#"$NF}
Isso diz a
awk
para imprimir o último campo da primeira linha seguido por um hashmark, seguido pelo último campo da segunda linha.Porque
print
é usado, o último caractere é impresso em uma nova linha, completando a saída.