sort命令linux的簡(jiǎn)單介紹

linux sort 命令整理

無(wú)論是工作中使用還是應(yīng)付各種面試,linux sort 都是必須要掌握的 linux 基本命令之一。尤其是 linux sort -k 命令,經(jīng)常會(huì)被搞暈,索性好好研究一下 sort 命令

成都創(chuàng)新互聯(lián)是專(zhuān)業(yè)的定州網(wǎng)站建設(shè)公司,定州接單;提供做網(wǎng)站、成都網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行定州網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

語(yǔ)法:

選項(xiàng):

參數(shù)就不一一介紹了,直接上例子,首先先看下原始的排序數(shù)據(jù)

cat sort.log

1、打印從哪列開(kāi)始是亂序

sort -c sort.log; echo $?

sort -C sort.log; echo $?

其中,返回結(jié)果 1,表示文件不是已經(jīng)排序好的文件

2、默認(rèn)排序( 整行進(jìn)行ASCII字符升序)

sort sort.log

3、高能來(lái)了,讓人迷糊的 k 語(yǔ)法,首先看下 k 的語(yǔ)法格式

這個(gè)語(yǔ)法格式可以被其中的逗號(hào)(”,”)分為兩大部分,Start部分和End部分

Start和End部分都由三部分組成,其中的Modifier部分就是類(lèi)似n和r的選項(xiàng)部分,可省略

FStart、Fend,表示使用的域,而CStart則表示在FStart域中從第幾個(gè)字符開(kāi)始算"排序首字符",同理,CEnd表示結(jié)尾的第幾個(gè)字符是排序末尾字符,.CStart、.CEnd是可以省略的,分別表示從本域的開(kāi)頭部分開(kāi)始、到本域的域尾結(jié)束,CEnd設(shè)定為0,也是表示結(jié)尾到域尾??谡f(shuō)無(wú)憑,上幾個(gè)例子吧

3.1 對(duì)第三列進(jìn)行排序,如果不加n,按照 ASCII字符排序

sort -t $'\t' -k 3 sort.log

3.2 加n后,按照數(shù)值排序

sort -t $'\t' -k 3n sort.log

3.3 不指定 FEnd 時(shí),多個(gè) -k 從前往后排序可以,從后往前不行

從后往前,多個(gè) -k,數(shù)據(jù)符合預(yù)期

sort -t $'\t' -k 3n -k 1 sort.log

從后往前,多個(gè) -k ,第三列相同時(shí),按照第一列降序排列,數(shù)據(jù)符合預(yù)期

sort -t $'\t' -k 3n -k 1r sort.log

更換成從前往后

sort -t $'\t' -k 1 -k 3n sort.log

sort -t $'\t' -k 1 -k 3nr sort.log

通過(guò) sort -t $'\t' -k 1 -k 3n sort.log 和 sort -t $'\t' -k 1 -k 3nr sort.log 返回的結(jié)果發(fā)現(xiàn),在第一列相等時(shí),無(wú)論其三列是正序排列,還是逆序排列,結(jié)果都一樣,說(shuō)明后邊的 -k 未生效

當(dāng)指定 FEend 后

sort -t $'\t' -k 1,1 -k 3nr sort.log

3.4 作用域

緊跟在字段后的選項(xiàng)(如"-k3n"的"n"和"-k2nr"的"n","r")稱(chēng)為私有選項(xiàng),使用短橫線(xiàn)寫(xiě)在字段外的選項(xiàng)(如"-n"、"-r")為全局選項(xiàng)。當(dāng)沒(méi)有為字段分配私有選項(xiàng)時(shí),該排序字段將繼承全局選項(xiàng),所有選項(xiàng)包括但不限于"bfnrhM"

除了"b"選項(xiàng)外,其余選項(xiàng)無(wú)論是指定在FStart還是FEnd中都是等價(jià)的,對(duì)于"b"選項(xiàng),指定在FStart則作用于FStart,指定在FEnd則作用于FEnd

sort -t $'\t' -k1r,2 sort.log ,可以看出一、二列都是倒敘排列

3.5 注意

指定n選項(xiàng)按數(shù)值排序時(shí), 由于"n"選項(xiàng)只能識(shí)別數(shù)字和負(fù)號(hào)"-",當(dāng)排序時(shí)遇到無(wú)法識(shí)別字符時(shí),將導(dǎo)致該key的排序立即結(jié)束,n選項(xiàng)絕對(duì)不會(huì)跨域進(jìn)行比較

默認(rèn)情況下,sort會(huì)進(jìn)行一次 "最后的排序" ,按照默認(rèn)規(guī)則對(duì)整行進(jìn)行一次排序,這次排序稱(chēng)為"最后的排序"

sort -t $'\t' -k3n sort.log ,在第三列相等時(shí),整行會(huì)按照 ASCII 進(jìn)行最后的升序排列

sort -t $'\t' -k3,4n -s sort.log ,加了 -s 后,不會(huì)進(jìn)行最后的排序(1000相同時(shí),e在b的前邊了),而是保留原排序

3.6 按照某個(gè)域中的第n個(gè)字符進(jìn)行排序

sort -t $'\t' -k2.3,2.3 sort.log ,按第二列第三個(gè)字符進(jìn)行排序

4、 -h 使用易讀性數(shù)字(例如:2K、1G)

sort -t $'\t' -k5h sort.log

sort -t $'\t' -k2,2 sort.log|uniq

sort -t $'\t' -k2,2 -u sort.log 會(huì)對(duì)第二列進(jìn)行去重,而 sort -t $'\t' -k2,2 sort.log|uniq 會(huì)對(duì)整行進(jìn)行去重(當(dāng)然uniq也可以按照第二列進(jìn)行去重)

sort整理完了,歡迎大牛指教

linux sort命令參數(shù)及用法詳解

Linux sort命令用于將文本文件內(nèi)容加以排序,sort可針對(duì)文本文件的內(nèi)容,以行為單位來(lái)排序。

sort命令的語(yǔ)法格式:sort[參數(shù)][文件]

Linux sort命令參數(shù):

-b:忽略每行前面開(kāi)始出的空格符號(hào)。

-c:檢查文件是否已經(jīng)按照順序排序。

-d:排序時(shí),處理英文字母、數(shù)字及空格字符外,忽略其他的字符。

-f:排序時(shí),將小寫(xiě)字母視為大寫(xiě)字母。

-i:排序時(shí),除了040至176之間的ASCII字符外,忽略其他的字符。

-m:將幾個(gè)排序好的文件進(jìn)行合并。

-M:將前面三個(gè)字母依照月份的縮寫(xiě)進(jìn)行排序。

-n:依照數(shù)值的大小排序。

-u:意味著是唯一的,輸出的結(jié)果是去完重了的。

-o:輸出文件將排序后的結(jié)果存入指定的文件。

-r:以相反的順序來(lái)排序。

-t:分隔字符指定排序時(shí)所用的欄位分隔字符。

每天一個(gè)linux命令(1)sort

sort 是將文件的每一行作為一個(gè)單位,相互比較,比較原則是從首字符向后,依次按照ASCII碼值進(jìn)行比較,默認(rèn)將他們按照升序輸出

降序

在輸出中去重

將排序結(jié)果輸出到原文件

sort的默認(rèn)輸出是輸出到標(biāo)準(zhǔn)輸出,如果想把結(jié)果輸出到文件,需要 sort file newfile,但是如果想把結(jié)果輸出到原文件這樣就不行了,這時(shí)就需要 使用sort -o

以數(shù)值來(lái)排序

sort 默認(rèn)是按照字符串排序的,這樣就會(huì)出現(xiàn)10比3小的情況,sort -n 就可以告訴sort 以整數(shù)排序

-t 后面跟 分隔符

-k 后面跟數(shù)字,表示用第幾列排序

如 sort -t : -k 2 表示把每行 以:號(hào)分割,按照第二列排序

banana:30:5.5

orange:20:3.4

apple:10:2.5

我們可以看到,當(dāng)baidu 和soho都是100的時(shí)候,baidu排在前面,當(dāng)當(dāng)前域按照默認(rèn)規(guī)矩,是從第一個(gè)域開(kāi)始進(jìn)行升序排序,因此baidu排在了sohu前面。

sort 支持 -k 2 -k3這種模式,如果你需要,你可以繼續(xù)這么寫(xiě)下去

你仔細(xì)看看,在-k 3后面偷偷加上了一個(gè)小寫(xiě)字母r,r和-r的作用是一樣,你也可以把前面的-n去掉 在r后面加上n,如下

其實(shí)-k 選項(xiàng) 功能很強(qiáng)大,語(yǔ)法[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

從逗號(hào)前后 分為兩大部分,即-k 2,2,是嚴(yán)格使用第一個(gè)域排序,如果只設(shè)置-k 2 其實(shí)是按照從第一個(gè)域到行尾。逗號(hào)分開(kāi)的每部分又有一個(gè)點(diǎn)表示子域,即-k 1.2表示 按照第一個(gè)域的第二個(gè)字符排序,Modifiers就是我們用到的n和r 如 -k 1.2nr 具體我們看下面的例子。

我們使用了-k 1.2,這就表示對(duì)第一個(gè)域的第二個(gè)字符開(kāi)始到本域的最后一個(gè)字符為止的字符串進(jìn)行排序。你會(huì)發(fā)現(xiàn)baidu因?yàn)榈诙€(gè)字母是a而名列榜首。sohu和 google第二個(gè)字符都是o,但sohu的h在google的o前面,所以?xún)烧叻謩e排在第二和第三。這和之前說(shuō)到的按照默認(rèn)的排序規(guī)則 是不同的,當(dāng)?shù)谝粋€(gè)域的第二個(gè)字符相同時(shí),他不會(huì)去按照第一個(gè)字符排序,而是按照后面的字符排序,這是因?yàn)?k 1.2是對(duì)第一個(gè)域的第二個(gè)字符開(kāi)始到本域的最后一個(gè)字符為止的字符串進(jìn)行排序。而之前的夸域其實(shí)是一種假象。

-u只識(shí)別用-k設(shè)定的域,發(fā)現(xiàn)相同,就將后續(xù)相同的行都刪除

但是這時(shí)候,卻一行也沒(méi)有刪除。原來(lái)-u是會(huì)權(quán)衡所有-k選項(xiàng),將都相同的才會(huì)刪除,只要其中有一級(jí)不同都不會(huì)輕易刪除的

可以用到b、d、f、i、n 或 r。

其中n和r你肯定已經(jīng)很熟悉了。

b表示忽略本域的簽到空白符號(hào)。

d表示對(duì)本域按照字典順序排序(即,只考慮空白和字母)。

f表示對(duì)本域忽略大小寫(xiě)進(jìn)行排序。

i表示忽略“不可打印字符”,只針對(duì)可打印字符進(jìn)行排序。(有些ASCII就是不可打印字符,比如\a是報(bào)警,\b是退格,\n是換行,\r是回車(chē)等等)

linux命令之排序命令sort命令

sort命令是對(duì)文件進(jìn)行排序,并將排序的結(jié)果輸出到屏幕,不影響原文件

以行為單位,將每一行作為一個(gè)單位,相互比較,比較原則是從首字符向后,以此按ASCII碼進(jìn)行比較,最后升序輸出

參數(shù)

-b 忽略每行前面開(kāi)始處的空格

-d 只按照英文字母,數(shù)字,空格字符排序,忽略其他字符

-m 將幾個(gè)排序好的文件進(jìn)行合并

-n 依照數(shù)值的大小進(jìn)行排序,如果是按照數(shù)值大小排序一定要加 -n ,否則就會(huì)出現(xiàn) 10 比2 小的情況,因?yàn)槟J(rèn)比較數(shù)值是先比較第1位的,后面的位不考慮

-o 將排序好的結(jié)果輸出到文件, 也可以使用重定向符號(hào) 輸出到文件中

-r 以相反的順序來(lái)排序, 默認(rèn)是升序

本文題目:sort命令linux的簡(jiǎn)單介紹
當(dāng)前URL:http://muchs.cn/article24/dosjjje.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁(yè)設(shè)計(jì)公司、域名注冊(cè)、關(guān)鍵詞優(yōu)化、全網(wǎng)營(yíng)銷(xiāo)推廣、網(wǎng)站收錄、響應(yīng)式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)