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
awkpara 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 comandonextinformaawkpara pular para a próxima linha. -
for(i=1;i<=NF-1;i++){printf a[i]"#"$i","}Isso diz
awkpara imprimir a colunaipara a primeira linha, seguida por um hashmark seguido pela colunaida 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
awkpara 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.