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)
问题是我有超过三列,而且我不知道它们的排列顺序,但我需要按升序对它们重新排序。
我们可以做的是使用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.