bash排序,以便结果按数字顺序和字符串顺序排列

时间:2015-11-11 06:36:39

标签: regex string bash compare

假设我在文件上运行sort -u后将两条相邻的行相互比较。我发现它们都从左侧匹配n个字符,然后在某个时刻开始不同意,并且在分歧开始的地方,第一行有一个数字“0”到“9”。第二行有一个非数字。我希望两条线交换位置。我为什么要这个?因为第一行中的数字meand它是一个更长的数字,并且需要落后于另一个,所以这些行,无论数字值如何,都将从此重新排列:

xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.DD-xx.x.x.x  
xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.D-xx.x.x.x  

到此:

xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.D-xx.x.x.x  
xxxx-xxxx-xxxxxxx.xxxxxxx.xxxx.DD-xx.x.x.x  

而且:

1  
10  
11  
12  
13  
14  
15  
2  
3  
4  
5  
6  
7  
8  
9  

成为这个:

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  

因为它强制数字值具有相同的位数 相互比较,从左侧分组的数字越多,数字越少,数字越少。

我的逻辑可能会在某些时候崩溃,但在我可以编码之前,我无法检查返回的结果。所以有人知道如何在bash中这样做吗?

1 个答案:

答案 0 :(得分:0)

sort -g(一般数字排序)应该可以解决问题。