shell指令碼學習(7)sort

2022-08-24 11:24:08 字數 2709 閱讀 6589

1 sort的格式

sort [options] [files]

sort 引數  檔案

2 引數 -t 用單個符char作為預設的字段分隔符, 預設字段分隔符是空白

引數-k 用來定義排序鍵值字段

一般是 -t分割好欄位, 再在字段中

原始資料

t:說明原資料 按:分段

k1 說明指定欄位1, 鍵值會從該字段的開始, 一直到字段結束而非字段的結尾。(也就是範圍很大咯)

排序1     這種排序沒看出是做什麼用的

sort -t: -k1 /etc/passwd

排序2  k用逗號修飾, 表示排序鍵值由第乙個字段值的開始出開始, 結束於第二個欄位的結尾位置這裡1,1  是說鍵值用第乙個字段表示

sort -t: -k1,1 /etc/passwd

和上面的結果沒差別,但理論上不同

排序3  指定鍵值為第三段,並按數字比較,然後倒敘

sort -t: -k3,3nr /etc/passwd

k的修飾符 n 表示按照數字(整數)比較

k的修改符 r 表示按照倒置排序

排序 4  先按字段4的整數排序, 再按字段3 的整數排序

通過寫兩個 -k 欄位號,欄位號n來實現

sort -t: -k4,4n -k3,3n /etc/passwd

比對這3組可以看出是先看第四字段排序了, 再按第三欄位排

排序 5 只輸出位置的排序記錄,有點拗口, 就是比對的鍵值重複出現

sort -t: -k4,4n -u /etc/passwd

比如這個時候就沒有兩行都帶7的了。

排序6 文字塊排序

位址和清單, 多行文字當做乙個資料塊的文字塊排序

使用awk  gsub配合rs變數(輸入資料記錄分隔符)  ors變數(輸出資料記錄分隔符)處理

比如想按這三段來排序 

rs=""把記錄按空行隔開

gsub()函式, 能把"\n" 替換成 「^z」 這樣輸入的問題就被處理了, 接下來只要排序這三行, 最後還原被替換的資料就可以了。

用sort -f不區分字母大小的排序

'在行和行之間加\n換回原來的格式

ors=「\n\n」 保持用空白行分割輸出記錄, 如果只寫乙個"\n"  效果就作文一樣的 ,一行一行沒分割的效果。

冒泡 插入 快排少量資料時處理速度都還好,大資料時幾乎是n^2

sort排序執行時間和記錄的數量成正比, 有被優化調整, 可以省下學排序演算法的時間。

穩定性:相同的記錄輸入順序,是否在輸出是也可以保持原狀, sort這方面不穩定, 要加--statble彌補

7  sort的刪除重複操作:

配合uniq  -c 計數唯一的, 顯示重複的次數

sort

do.txt |uniq -c

原始資料:

用uniq -c的

顯示重複的字段

sort

do.txt |uniq -d

-d的功能:只顯示重複的資料

顯示未重複的字段

sort

do.txt |uniq -u

-u的功能:顯示未重複的資料

shell 指令碼學習

case var in pattern statement esac case 的指令碼語法是雙分號結尾的。sed e s i.86 i386 查詢替換。sed 流編輯器 將輸入流中的i.86替換成i386。是個萬用字元。輸入流的形式可能是 管道,檔案。shell d mkdir p 指令碼的條件執...

shell指令碼學習

shell 學習 1.shell 解釋型語言,有很多種直譯器。預設是 bin bash。shell指令碼第一行要寫 bin bash 2.shell指令碼執行的方法 1 sh sh 2 chmod a x sh sh 注意,一定要寫成.sh,而不是 sh。執行其它二進位制的程式也一樣,直接寫 sh,...

shell指令碼學習

反引號 反引號是命令替換,命令替換是指shell可以先執行中的命令,將輸出結果暫時儲存,在適當的地方輸出。語法 command 反引號是tab鍵的上乙個按鍵 重定向 如果檔案不存在,將建立新的檔案,並將資料送至此檔案 如果檔案存在,則將資料新增在檔案後面 如果檔案不存在,同上,如果檔案存在,先將檔案...