Linuxでのsortコマンドの使い方

9143 ワード

目次
  • 命令形式:
  • 共通パラメータ:
  • テスト:
  • 1. 脱重
  • 2. 除重+降順(逆順)ソート:
  • 3. 数字順:
  • 4. 数字の逆順
  • 5. 区切り記号のソートを指定:対応する列でソート
  • sortコマンド:テキストファイルの内容をソートするために使用され、sortはテキストファイルの内容に対して動作単位でソートできます.
    コマンド形式:sort [-bcdfimMnr][-o][-t][+-][--help][--verison][ ]
    一般的なパラメータ:
    -b各行の前から始まるスペース文字を無視します.-cファイルが順番に並べられているかどうかを確認します.-dソート時には、英字、数字およびスペース文字以外を処理し、他の文字を無視する.スペース、アルファベット、および数値-fのソートのみを考慮する場合は、小文字を大文字と見なします.-iソートの場合、040~176の間のASCII文字を除き、他の文字は無視されます.印刷可能な文字のみを考慮します.-mいくつかのソートされたファイルをマージします.-Mは、前の3文字を月の略語で並べ替えます.-n数値の大きさに従ってソートする.指定した列をソートし、+0は最初の列を表し、スペースまたはタブを列の間隔として使用します.-oソート後の結果を指定したファイルに格納します.-u重量を除去し、-cを配合し、厳格にソートを検査する.-cを組み合わせないと、ソート結果は1回のみ出力され、一般的にuniqで置き換えられる.-r逆順序(降順)は逆の順序で並べ替えられる.-tソート時に使用するカラム区切り文字を指定します.たとえば、-t.は、awk-Fまたはcut-d-kが何番目の列または何番目の列の何番目の文字を指定するのと同様に、ドメインをポイント番号で区切ることを表します.-tと組み合わせて+-を使用して、指定した欄位でソートします.範囲は開始欄位から終了欄位までの前の欄位です.–helpはヘルプを表示します.–バージョン情報が表示されます.
    テスト:
    1.重量除去
    [fuyun@bigdata-training datas]$ cat sort1.txt 
    a 5
    c 6
    a 1
    b 1
    c 3
    192.168.43.117
    192.168.43.119
    192.168.43.118
    192.168.43.118
    192.168.43.117
    192.168.43.117
    192.168.43.119
    192.168.43.110
    
    [fuyun@bigdata-training datas]$ sort -u sort1.txt 
    192.168.43.110
    192.168.43.117
    192.168.43.118
    192.168.43.119
    a 1
    a 5
    b 1
    c 3
    c 6
    
    [fuyun@bigdata-training datas]$ sort --uniq sort1.txt 
    192.168.43.110
    192.168.43.117
    192.168.43.118
    192.168.43.119
    a 1
    a 5
    b 1
    c 3
    c 6
    
    [fuyun@bigdata-training datas]$ uniq sort1.txt # :-u,   uniq  
    a 5
    c 6
    a 1
    b 1
    c 3
    192.168.43.117
    192.168.43.119
    192.168.43.118
    192.168.43.117
    192.168.43.119
    192.168.43.110
    

    2.重量除去+降順(逆順)ソート:
    [fuyun@bigdata-training datas]$ sort -ur sort1.txt 
    c 6
    c 3
    b 1
    a 5
    a 1
    192.168.43.119
    192.168.43.118
    192.168.43.117
    192.168.43.110
    

    3.数値でソート:
    注意:デフォルトは昇順
    [fuyun@bigdata-training datas]$ sort -n sort1.txt 
    a 1
    a 5
    b 1
    c 3
    c 6
    192.168.43.110
    192.168.43.117
    192.168.43.117
    192.168.43.117
    192.168.43.118
    192.168.43.118
    192.168.43.119
    192.168.43.119
    

    4.数値の逆順序でソート
    [fuyun@bigdata-training datas]$ sort -r sort1.txt 
    c 6
    c 3
    b 1
    a 5
    a 1
    192.168.43.119
    192.168.43.119
    192.168.43.118
    192.168.43.118
    192.168.43.117
    192.168.43.117
    192.168.43.117
    192.168.43.110
    

    5.区切り記号のソートの指定:対応する列でソート
    -k, --key=pos1[pos2]
    
      start a key at pos1 (orign 1), end it at pos2 (default end of line)
    
  • デフォルトは行全体で並べ替えられます.
  • -t区切り記号を指定、-k 1、区切り記号の後の第1列ソート
  • -k 1,1はカンマで区切られ、最初のフィールドが最初のフィールドに並べ替えられることを示す
  • -k 1.1,3.3は点区切り文字である.最初のフィールドの最初の文字が3番目のフィールドの3番目の文字にソートされ始めたことを示します.
  • [fuyun@bigdata-training datas]$ cat sort.txt 
    a 5
    c 6
    a 1
    b 1
    c 3
    a 192.168.43.117
    f 192.168.43.119
    b 192.168.43.118
    z 192.168.43.118
    s 192.168.43.117
    k 192.168.43.117
    c 192.168.43.119
    o 192.168.43.110
    
    [fuyun@bigdata-training datas]$ sort -t" " -k2 sort.txt 
    a 1
    b 1
    o 192.168.43.110
    a 192.168.43.117
    k 192.168.43.117
    s 192.168.43.117
    b 192.168.43.118
    z 192.168.43.118
    c 192.168.43.119
    f 192.168.43.119
    c 3
    a 5
    c 6
    

    区切り文字はデフォルトでスペース、-tは省略可能、すべての上のコマンドはsort -k2 sort.txt
    [fuyun@bigdata-training datas]$ sort -k2 sort.txt 
    a 1
    b 1
    o 192.168.43.110
    a 192.168.43.117
    k 192.168.43.117
    s 192.168.43.117
    b 192.168.43.118
    z 192.168.43.118
    c 192.168.43.119
    f 192.168.43.119
    c 3
    a 5
    c 6
    
    [fuyun@bigdata-training datas]$ cat sort2.txt 
    192.168.0.1 00:OF:AF:45:4C:78
    192.168.0.71 00:OF:1AF:45:4C:76
    192.168.0.16 00:OF:KF:55:S6:25
    192.168.0.99 00:LF:9F:R5:IC:27
    192.168.0.91 00:OF:H6:45:A1:67
    192.168.0.65 00:O1:W3:45:49:94
    192.168.0.89 00:OF:A8:33:V5:90
    192.168.0.31 00:90:32:J9:1L:14
    192.168.0.19 00:OF:76:29:30:DF
    192.168.0.177 00:OF:12:09:P9:41
    192.168.0.121 00:YF:A2:U7:4O:RT
    192.168.0.253 00:OF:SD:40:J3:19
    192.168.0.51 00:II:V5:39:47:OI
    192.168.0.46 00:OF:A3:81:D3:1Y
    192.168.0.7 00:OI:W1:IW:H7:B1
    192.168.0.189 00:OF:S5:00:12:70
    192.168.0.155 00:OY:TF:4Q:46:8M
    
    

    4番目のフィールドからソートを開始し、4番目のフィールドまでソートを終了し、数値で降順にします.
    [fuyun@bigdata-training datas]$ sort -t. -k4,4nr sort2.txt 
    192.168.0.253 00:OF:SD:40:J3:19
    192.168.0.189 00:OF:S5:00:12:70
    192.168.0.177 00:OF:12:09:P9:41
    192.168.0.155 00:OY:TF:4Q:46:8M
    192.168.0.121 00:YF:A2:U7:4O:RT
    192.168.0.99 00:LF:9F:R5:IC:27
    192.168.0.91 00:OF:H6:45:A1:67
    192.168.0.89 00:OF:A8:33:V5:90
    192.168.0.71 00:OF:1AF:45:4C:76
    192.168.0.65 00:O1:W3:45:49:94
    192.168.0.51 00:II:V5:39:47:OI
    192.168.0.46 00:OF:A3:81:D3:1Y
    192.168.0.31 00:90:32:J9:1L:14
    192.168.0.19 00:OF:76:29:30:DF
    192.168.0.16 00:OF:KF:55:S6:25
    192.168.0.7 00:OI:W1:IW:H7:B1
    192.168.0.1 00:OF:AF:45:4C:78
    

    3番目のフィールドの1番目の文字から4番目のフィールドの1番目の文字まで、数値の降順で並べ替えます.
    [fuyun@bigdata-training datas]$ sort -t. -k3.1,4.1nr sort2.txt 
    192.168.0.91 00:OF:H6:45:A1:67
    192.168.0.99 00:LF:9F:R5:IC:27
    192.168.0.89 00:OF:A8:33:V5:90
    192.168.0.7 00:OI:W1:IW:H7:B1
    192.168.0.71 00:OF:1AF:45:4C:76
    192.168.0.65 00:O1:W3:45:49:94
    192.168.0.51 00:II:V5:39:47:OI
    192.168.0.46 00:OF:A3:81:D3:1Y
    192.168.0.31 00:90:32:J9:1L:14
    192.168.0.253 00:OF:SD:40:J3:19
    192.168.0.1 00:OF:AF:45:4C:78
    192.168.0.121 00:YF:A2:U7:4O:RT
    192.168.0.155 00:OY:TF:4Q:46:8M
    192.168.0.16 00:OF:KF:55:S6:25
    192.168.0.177 00:OF:12:09:P9:41
    192.168.0.189 00:OF:S5:00:12:70
    192.168.0.19 00:OF:76:29:30:DF
    

    2つのソートされたファイルをマージして結果ファイルに出力
    [fuyun@bigdata-training datas]$ sort -k2 sort.txt -t. -k4,4nr sort2.txt -m
    a 5
    c 6
    a 1
    b 1
    c 3
    192.168.0.1 00:OF:AF:45:4C:78
    192.168.0.71 00:OF:1AF:45:4C:76
    192.168.0.16 00:OF:KF:55:S6:25
    192.168.0.99 00:LF:9F:R5:IC:27
    192.168.0.91 00:OF:H6:45:A1:67
    192.168.0.65 00:O1:W3:45:49:94
    192.168.0.89 00:OF:A8:33:V5:90
    192.168.0.31 00:90:32:J9:1L:14
    192.168.0.19 00:OF:76:29:30:DF
    192.168.0.177 00:OF:12:09:P9:41
    192.168.0.121 00:YF:A2:U7:4O:RT
    192.168.0.253 00:OF:SD:40:J3:19
    192.168.0.51 00:II:V5:39:47:OI
    192.168.0.46 00:OF:A3:81:D3:1Y
    192.168.0.7 00:OI:W1:IW:H7:B1
    192.168.0.189 00:OF:S5:00:12:70
    192.168.0.155 00:OY:TF:4Q:46:8M
    a 192.168.43.117
    f 192.168.43.119
    b 192.168.43.118
    z 192.168.43.118
    s 192.168.43.117
    k 192.168.43.117
    c 192.168.43.119
    o 192.168.43.110
    
    [fuyun@bigdata-training datas]$ sort -k2 sort.txt -t. -k4,4nr sort2.txt -m -o sortAll.t
    [fuyun@bigdata-training datas]$ cat sortAll.txt 
    a 5
    c 6
    a 1
    b 1
    c 3
    192.168.0.1 00:OF:AF:45:4C:78
    192.168.0.71 00:OF:1AF:45:4C:76
    192.168.0.16 00:OF:KF:55:S6:25
    192.168.0.99 00:LF:9F:R5:IC:27
    192.168.0.91 00:OF:H6:45:A1:67
    192.168.0.65 00:O1:W3:45:49:94
    192.168.0.89 00:OF:A8:33:V5:90
    192.168.0.31 00:90:32:J9:1L:14
    192.168.0.19 00:OF:76:29:30:DF
    192.168.0.177 00:OF:12:09:P9:41
    192.168.0.121 00:YF:A2:U7:4O:RT
    192.168.0.253 00:OF:SD:40:J3:19
    192.168.0.51 00:II:V5:39:47:OI
    192.168.0.46 00:OF:A3:81:D3:1Y
    192.168.0.7 00:OI:W1:IW:H7:B1
    192.168.0.189 00:OF:S5:00:12:70
    192.168.0.155 00:OY:TF:4Q:46:8M
    a 192.168.43.117
    f 192.168.43.119
    b 192.168.43.118
    z 192.168.43.118
    s 192.168.43.117
    k 192.168.43.117
    c 192.168.43.119
    o 192.168.43.110