如何将不同的排序方法应用于BASH中CSV文件中的不同列?

Vil*_*age 0 sorting bash shell awk

我有一个这样的CSV文件:

fish,4
cat,1
elephant,1
tree,2
dog,8
car,10
Run Code Online (Sandbox Code Playgroud)

awk -F',' '{print length($1),$0}' file.csv | sort -k1nr | cut -d' ' -f 2- 对于出现在第一列中的所有单词,将按字长对文件进行排序:

elephant,1
fish,4
tree,2
cat,1
dog,8
car,10
Run Code Online (Sandbox Code Playgroud)

sort -t, -k+2 -n -r file.csv 将根据第二列中出现的数字将文件从最大到最小排序:

car,10
dog,8
fish,4
tree,2
elephant,1
cat,1
Run Code Online (Sandbox Code Playgroud)

如何将这两个命令一起使用,使CSV文件首先按字长排序,根据第一列中出现的字,然后在第一列中包含相等长度字的任何行根据出现的数字排序.从最大到最小的第二列.结果输出如下所示:

elephant,1
fish,4
tree,2
car,10
dog,8
cat,1
Run Code Online (Sandbox Code Playgroud)

这两种排序方法如何一起使用?

Ken*_*ent 5

试试这一行:

awk -F, '{print length($1)","$0}' file|sort -t, -rn  -k1 -k3|sed 's/[^,],//'
Run Code Online (Sandbox Code Playgroud)

会给你:

elephant,1
fish,4
tree,2
car,10
dog,8
cat,1
Run Code Online (Sandbox Code Playgroud)

想法是,首先将col1的长度添加到输出,然后用两列对awk的输出进行排序,最后删除添加的长度列(第一列)以获得最终结果.