Sort
sort指令以行為機關對文本進行排序。
指令文法:
sort [-b/d/f/g/i/M/n/r] [InFile]
參數解釋:
-b: ignore-leading-blanks,忽略前面空格符部分
-d: data-order,僅考慮空格和字母數字字元
-f: ignore-case,忽略大小寫
-g: general-numeric-sort,根據一般數值進行排序
-i: ignore-nonprinting,忽略不可列印的字元,比如換行符、回車符
-M: month-sort,以月份進行排序
-n: numeric-sort,根據字元串數值進行排序
-r: reverse,反向輸出排序結果
其他參數:
-c: check,檢查文本是否已排序,如果不是,則輸出第一個亂序的行的相關資訊,傳回1
-k N: key,以第N列進行排序
-m S1 S2: merge,合并已排序的S1、S2文本,不再排序
-o File: output,将結果寫入File中
-s: stable,通過禁用最後的比較來穩定排序
-t sep: field-separator,使用sep作為分隔符來區分列
-u: unique,去掉重複的行
-z: 零終止的結束行,0位元組,而不是換行符
-k選項解釋
-k選項的具體文法格式:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
這個文法格式可以被其中的逗号(“,”)分為兩大部分,Start部分和End部分。
先給你灌輸一個思想,那就是“如果不設定End部分,那麼就認為End被設定為行尾”。這個概念很重要的,但往往你不會重視它。
Start部分也由三部分組成,其中的Modifier部分就是我們之前說過的類似n和r的選項部分。我們重點說說Start部分的FStart和C.Start。
C.Start也是可以省略的,省略的話就表示從本域的開頭部分開始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。
FStart.CStart,其中FStart就是表示使用的域,而CStart則表示在FStart域中從第幾個字元開始算“排序首字元”。
同理,在End部分中,你可以設定FEnd.CEnd,如果你省略.CEnd,則表示結尾到“域尾”,即本域的最後一個字元。或者,如果你将CEnd設定為0(零),也是表示結尾到“域尾”。
在modifier部分還可以用到哪些選項
可以用到b、d、f、i、n 或 r。
其中n和r你肯定已經很熟悉了。
b 表示忽略本域的前導空白符号。
d 表示對本域按照字典順序排序(即,隻考慮空白和字母)。
f 表示對本域忽略大小寫進行排序。
i 表示忽略“不可列印字元”,隻針對可列印字元進行排序。(有些ASCII就是不可列印字元,比如\a是報警,\b是倒退,\n是換行,\r是回車等等)
-k和-u聯合,則 -u 隻根據k指定的域去重。
在sort指令後會看到+1 -2這些符号
表示排序從第幾個域到第幾個域,已廢棄。
Join
功能:
“将兩個檔案裡指定欄位同樣的行連接配接起來”,即依照兩個檔案裡共有的某一列,将相應的行拼接成一行。
join [options] file1 file2
注:這兩個檔案必須在已經在此列上是依照同樣的規則進行了排序。
join選項
-a FILENUM:除了顯示比對好的行另外将指定序号(1或2)檔案裡部比對的行顯示出來
-e EMPTY:将須要顯示可是檔案裡不存在的域用此選項指定的字元取代
-i :忽略大寫和小寫
-j FIELD :等同于 -1 FIELD -2 FIELD,-j指定一個域作為比對字段
-o FORMAT:以指定格式輸出
-t CHAR :以指定字元作為輸入輸出的分隔符。join 預設以空白字元做分隔符(空格和\t),能夠使用 join -t $'\t'來指定使用tab做分隔符
-v FILENUM:與-a相似 但值顯示檔案裡沒比對上的行
-1 FIELD:以file1中FIELD字段進行比對
-2 FIELD:以file2中FIELD字段進行比對
--help :列印指令幫助檔案
join 标準輸入
有時我們須要将多個格式同樣的檔案join到一起,而join接受的是兩個檔案的指令,此時我們能夠使用管道和字元“-"來實作
join file1 file2 | join - file3 | join - file4
這樣就能夠将四個檔案 連接配接到 一起了。