Linux - 基于2个字段名称排序

时间:2015-04-21 14:07:31

标签: linux sorting

我有几个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

但是,由于每个文件中的字段位置不同,有没有办法根据字段名称进行排序?

由于

3 个答案:

答案 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的其他问题中得到解决: