我有几个txt文件“file_i.txt”,如下所示:
id, size, price, colour
1, 2, 10, black
2, 8, 5, blue
...
所有文件都包含这些字段,但字段顺序可能不同。
我想根据两个功能对每个文件进行排序,首先是价格,然后是尺寸。我知道可以使用命令sort以这种方式对两个字段进行排序:
sort -k2,3 -k1,2 file_i.txt
但是,由于每个文件中的字段位置不同,有没有办法根据字段名称进行排序?
由于
答案 0 :(得分:1)
基本上sort
命令应如下所示:
sort -k3n -k2n input
N
中的-kN
是密钥的编号,而n
表示排序数字。
sort
无法按字段名称排序。你需要以某种方式得到列号。我正在使用awk
:
kprice=$(awk -F', ' -vfield=price 'NR==1{for(i=1;i<=NF;i++){if($i==field){print i;exit}}}' a.txt)
ksize=$(awk -F', ' -vfield=size 'NR==1{for(i=1;i<=NF;i++){if($i==field){print i;exit}}}' a.txt)
sort -k"$kprice"n -k"$ksize"n a.txt
答案 1 :(得分:0)
我认为你必须自己写一个剧本,说&#34; mySort&#34;并发布为:
./mySort "id" "size"
伪代码,假设第一行文件包含&#34;列&#34;名:
read input list
for each element in list, save the position (parsing first line)
apply sort
答案 2 :(得分:0)
你可以做一些预处理:
每个文件:
然后,所有列都将以相同的方式排序,您可以使用标准sort
方法。
在bash中转换文件已在SO的其他问题中得到解决: