sij*_*sij 8 text-processing sort
我试过这个:
$ echo "2,3435,1" | sort -n
2,3435,1
$ sort -t',' -n test_sort.txt
kill,gill,burger
110,20,30,13
$ cat test_sort.txt
110,20,30,13
kill,gill,burger
Run Code Online (Sandbox Code Playgroud)
为什么我的sort
命令不起作用?
我想要的sort
命令应该像这样工作:
$sort -t',' -n test_sort.txt
110,13,20,30,burger,gill,kill
Run Code Online (Sandbox Code Playgroud)
答案: tr , '\n' < a | 排序 -n | 粘贴 -sd, -
“感谢 Stéphane Chazelas”
god*_*eek 11
sort
在整条线上运行。默认情况下,它对该行的全部内容-k
进行排序,但可用于对这些行中的一个或多个字段进行排序。 -t
可用于更改字段之间的分隔符。我想不出使用-t
而不使用的情况有-k
任何意义。
您的第二个命令,相当于:
printf "%s\n%s\n" "110,20,30,13" "kill,gill,burger" | sort -t',' -n
Run Code Online (Sandbox Code Playgroud)
产生:
kill,gill,burger
110,20,30,13
Run Code Online (Sandbox Code Playgroud)
这是我所期望的。 -t','
没有任何影响,因为当您没有告诉 sort 对单个字段进行操作时,它会更改字段分隔符,因此k
之前已排序,1
因为其数值为 0(并且您使用 请求数字排序-n
)。
小智 7
按逗号排序是有可能的:
echo "a,b,z,sa,b,z,a,d,2,4a,a,dx" | tr , "\n" | sort
Run Code Online (Sandbox Code Playgroud)
输出
2
4a
a
a
a
b
b
d
dx
sa
z
z
Run Code Online (Sandbox Code Playgroud)
如果你想让它回到一行:
echo "a,b,z,sa,b,z,a,d,2,4a,a,dx" | tr , "\n" | sort | tr "\n" ,
Run Code Online (Sandbox Code Playgroud)