Raf*_*gio 82 unix csv sorting sql-order-by
我有一个csv文件,我想按列优先级排序,比如"order by".例如:
3;1;2
1;3;2
1;2;3
2;3;1
2;1;3
3;2;1
Run Code Online (Sandbox Code Playgroud)
如果这种情况是"选择"的结果,"order by"将如下:order by column2,column1,column3 - 结果将是:
2;1;3
3;1;2
1;2;3
3;2;1
1;3;2
2;3;1
Run Code Online (Sandbox Code Playgroud)
我想知道如何在Unix上使用"sort"命令获得相同的结果.
Cha*_*tin 135
sort --field-separator=';' --key=2,1,3
Run Code Online (Sandbox Code Playgroud)
Sam*_*ien 24
上面的查理答案在Cygwin(排序版本2.0,GNU textutils)上对我没有用,以下是:
sort -t"," -k2 -k1 -k1
Run Code Online (Sandbox Code Playgroud)
Mar*_*oma 23
假设您3;10;3的unsorted.csv文件中有另一行.然后我猜你期望得到一个数字排序的结果:
2;1;3
3;1;2
1;2;3
3;2;1
1;3;2
2;3;1
3;10;3
Run Code Online (Sandbox Code Playgroud)
而不是按字母顺序排序的:
2;1;3
3;1;2
3;10;3
1;2;3
3;2;1
1;3;2
2;3;1
Run Code Online (Sandbox Code Playgroud)
为此,您必须使用-n:
sort --field-separator=';' -n -k 2,2 -k 1,1 -k 3,3 unsorted.csv
Run Code Online (Sandbox Code Playgroud)
值得一提的是2,2必须使用.如果仅2使用,则将sort字符串从字段2的开头带到结尾.2,2确保只使用字段2.