Ordenar colunas no arquivo CSV

2

Estou tentando ordenar todas as colunas por nome de coluna em um arquivo csv. O que eu tenho é algo assim:

name  ,adress  ,mobile-number
Ane   ,USA     ,12121212
Joane ,England ,234234

e a saída que eu preciso é

adress ,name  ,mobile-number
USA    ,Ane   ,12121212
England,Joane ,234234

O problema é que tenho mais de 3 colunas e não sei a ordem em que elas entram, mas preciso reorganizá-las em ordem crescente.

    
por Sofia Costa 22.02.2016 / 17:43

1 resposta

1

O que podemos fazer é transpor as colunas para linhas usando o rs utilitário proveniente do BSD Unix, em seguida, apenas sort das linhas (assim, efetivamente, classificando as colunas dos dados originais) e, em seguida, transponha novamente.

Em primeiro lugar, observe que, em ordem alfabética, é: endereço, número do celular, nome. M está antes de N!

Passo a passo:

$ cat data
name  ,adress  ,mobile-number
Ane   ,USA     ,12121212
Joane ,England ,234234

$ rs -s, -C, -T < data
name  ,Ane   ,Joane ,
adress  ,USA     ,England ,
mobile-number,12121212,234234,

$ rs -s, -C, -T < data | sort
adress  ,USA     ,England ,
mobile-number,12121212,234234,
name  ,Ane   ,Joane ,

$ rs -s, -C, -T < data | sort | rs -s, -C, -T
adress  ,mobile-number,name  ,
USA     ,12121212,Ane   ,
England ,234234,Joane ,

$ rs -s, -C, -T < data | sort | rs -s, -S' ' -T
adress         mobile-number  name  
USA            12121212       Ane   
England        234234         Joane 

Finalmente:

$ rs -s, -C, -T < data | sort | rs -s, -S' ' -T | sed -e 's/ \([^ ]\)/,/g'
adress        ,mobile-number ,name  
USA           ,12121212      ,Ane   
England       ,234234        ,Joane 

Eu fiz isso no Ubuntu GNU / Linux, e primeiro tive que sudo apt-get install rs .

    
por 01.09.2016 / 04:31