簡體   English   中英

linux按數字順序按多個分隔符排序

[英]linux sort by multiple delimiters with numerical order

我有按第二列排序的數據,但它們不是我所期望的。

0:1, 0:0,
0:2, 0:0,
1:1, 0:1,
1:2, 0:1,
0:11, 0:10,
0:12, 0:10, 
0:12, 0:11,
0:13, 0:11,
... (omit text) ...
1:192, 0:192,
2:192, 0:192,
0:3, 0:2,
0:4, 0:2,
... (omit text) ...
11:63, 9:63,
12:63, 9:63,
10:10, 9:7,
10:7, 9:7,
6:10, 9:7,
6:8, 9:7, 
...

使用sort -t',' -k2,2 text.txt數據進行排序。 我想按第二列對它們進行數字排序,但是0:3, 0:2之后是2:192, 0:192 此外,第一列沒有按數字順序排序,因為10:7, 9:7,之后是10:10, 9:7

我想先按第二列然后按第一列對數據進行數字排序。 在第二列中,第一個數字在第二個數字之前,例如2:192, 0:192后跟11:63, 9:63 第一列也是如此。 我可以使用什么樣的命令來獲得如下所示的結果?

0:1, 0:0,
0:2, 0:0,
1:1, 0:1,
1:2, 0:1,
0:3, 0:2,
0:4, 0:2,
0:11, 0:10,
0:12, 0:10, 
0:12, 0:11,
0:13, 0:11,
... (omit text) ...
1:192, 0:192,
2:192, 0:192,
... (omit text) ...
6:8, 9:7,
6:10, 9:7, 
10:7, 9:7,
10:10, 9:7,
11:63, 9:63,
12:63, 9:63,
...

首先,將冒號轉換為逗號,以便您可以指定一個分隔符進行排序。

tr : ,

然后,按四列數字排序(注意n

sort -t, -k3,3n -k4,4n -k1,1n -k2,2n

最后,將后面沒有空格的逗號轉換回冒號:

sed 's/,\([^ ]\)/:\1/g'

或者,作為單個管道:

tr : , < input \
| sort -t, -k3,3n -k4,4n -k1,1n -k2,2n \
| sed 's/,\([^ ]\)/:\1/g'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM