1. 程式人生 > 其它 >Sort命令

Sort命令

Sort

首先在Linux中使用man引數來檢視sort的相關用法
man sort
如圖所示:

sort常用命令選項及其意義

選項 意義
-c 測試檔案是否已經被排序
-k 指定排序的域
-m 合併兩個已排序的檔案
-n 根據數字大小進行排序
-o[輸出檔案] 將輸出寫到指定的檔案,相當於將輸出重定向到指定檔案
-r 將排序結果逆向展示
-t 改變域分隔符
-u 去除結果中的重複行

1.-k引數

sort命令預設情況下是按第1域進行排序的,也可以按指定某個域進行排序,-k選項就是用於指定域的。sort命令以1表示第1域、以2表示第2域,以此類推。
eg:初始資料為:


對第一域進行排序
sort -k1 20191307.txt
結果為:

對第二域進行排序(由於第二域資料為數字,所以要加上引數-n)

sort -n -k2 20191307.txt

結果為

2.-n引數

-n選項可以指定根據數字大小進行排序。

sort -nk3 20191307.txt

3.-r引數

-r選項用於將排序結果逆向顯示

sort -nrk3 20191307.txt

4.-u引數

-u選項用於去除排序結果中的重複行,若在檔案中插入幾行重複的資料,排序後重複數據會被去除。
如圖:
sort -nk3 -u 20191307.txt

  • 排序前資料

    排序後:

5.-o引數

sort命令預設將排序後的結果輸出到螢幕上,如果需要將結果儲存到另一個檔案中,我們可以使用-o選項加上檔名來完成。
sort -nk3 -u 20191307.txt -o sort.txt


如圖,在當前資料夾中生成了相應檔案並排序好

6.-c引數

-c選項用於測試檔案是否已經排好序

可以看出sort檔案已經排序成功,20191307檔案依舊是亂序。

編寫sort虛擬碼

read(file)
sort (data)
close(file)

sort (data)
# include <stdio.h>
int main(void)
{
    int a[] = data;
    int n;  //存放陣列a中元素的個數
    int i;  //比較的輪數
    int j;  //每輪比較的次數
    int buf;  //交換資料時用於存放中間資料
    n = sizeof(a) / sizeof(a[0]);  /*a[0]是int型, 佔4位元組, 所以總的位元組數除以4等於元素的個數*/
    for (i=0; i<n-1; ++i)  //比較n-1輪
    {
        for (j=0; j<n-1-i; ++j)  //每輪比較n-1-i次,
        {
            if (a[j] < a[j+1])
            {
                buf = a[j];
                a[j] = a[j+1];
                a[j+1] = buf;
            }
        }
    }
    for (i=0; i<n; ++i)
    {
        printf("%d\x20", a[i]);
    }
    printf("\n");
    return 0;
}