对 CSV 文件中的列进行排序

Sof*_*sta 5 text-processing csv

我正在尝试按 CSV 文件中的列名称对所有列进行排序。我所拥有的是这样的:

name  ,adress  ,mobile-number
Ane   ,USA     ,12121212
Joane ,England ,234234
Run Code Online (Sandbox Code Playgroud)

我需要的输出是

adress ,name  ,mobile-number
USA    ,Ane   ,12121212
England,Joane ,234234
Run Code Online (Sandbox Code Playgroud)

问题是我有超过三列,而且我不知道它们的排列顺序,但我需要按升序对它们重新排序。

Kaz*_*Kaz 1

我们可以做的是使用rs源自 BSD Unix 的实用程序将列转置为行,然后仅sort转置行(从而有效地对原始数据的列进行排序),然后再次转置。

首先,请注意,按字母顺序排列,它是:地址、手机号码、姓名。M 在 N 之前!

一步步:

$ 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 
Run Code Online (Sandbox Code Playgroud)

最后:

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

我在 Ubuntu GNU/Linux 上做到了这一点,首先必须sudo apt-get install rs.