Linux Shell 用法(二)sort和mktemp命令

sort和uniq命令可以從特定的文件或stdin中獲取輸入,並將輸出寫入stdout。
(1) 可以按照下面的方式排序一組文件(例如file1.txt和file2.txt):

$ sort file1.txt file2.txt > sorted.txt

或是

$ sort file1.txt file2.txt -o sorted.txt

(2) 按照數字順序排序:

$ sort -n file.txt

(3) 按照逆序排序:

$ sort -r file.txt

(4) 按照月份排序(依照一月、二月、三月…):

$ sort -M months.txt

(5) 合併兩個已排序過的文件:

$ sort -m sorted1 sorted2

(6) 找出已排序文件中不重複的行:

$ sort file1.txt file2.txt | uniq

(7) 檢查文件是否已經排序過:

#!/bin/bash #功能描述:排序
sort -C filename ;
if [ $? -eq 0 ]; then
          echo Sorted;
       else
          echo Unsorted;
       fi

將filename替換成你需要檢查的文件名,然後運行該腳本。

如果輸入數據的格式如下,我們可以按列排序:

$ cat data.txt
1 mac 2000
2 winxp 4000 12 3 bsd 1000
4 linux 1000
# 依據第1列,以逆序形式排序 $ sort -nrk 1 data.txt 4 linux 1000
3 bsd 1000
2 winxp 4000
1 mac 2000
# -nr表明按照數字順序,採用逆序形式排序
# 依據第2列進行排序
$ sort -k 2 data.txt 3 bsd 1000
4 linux 1000
1 mac 2000
2 winxp 4000

uniq


$ cat sorted.txt bash
foss
hack
hack
$ uniq sorted.txt bash
foss
hack

或是 只顯示唯一的行(在輸入文件中沒有重複出現過的行):

$ uniq -u sorted.txt 
bash
foss

或是

$ sort unsorted.txt | uniq -u

要統計各行在文件中出現的次數,使用下面的命令:

$ sort unsorted.txt | uniq -c
1 bash
1 foss 
2 hack

找出文件中重複的行:

$ sort unsorted.txt | uniq -d
hack

-z選項可以生成由0值字節終止的輸出:

$ uniq -z file.txt

下面的命令將刪除所有指定的文件,這些文件的名字是從files.txt中讀取的:

$ uniq -z file.txt | xargs -0 rm

mktemp命令可以爲臨時文件或目錄創建唯一的名字。

(1) 創建臨時文件:

$ filename=`mktemp` 
$ echo $filename 
/tmp/tmp.8xvhkjF5fH

上面的代碼創建了一個臨時文件,然後打印出保存在變量filename中的文件名。
(2) 創建臨時目錄:

$ dirname=`mktemp -d` 
$ echo $dirname tmp.NI8xzW7VRX

上面的代碼創建了一個臨時目錄,然後打印出保存在變量dirname中的目錄名。
如果僅僅是想生成文件名,不希望創建實際的文件或目錄,可以這樣:

$ tmpfile=`mktemp -u` 
$ echo $tmpfile
/tmp/tmp.RsGmilRpcT

文件名被存儲在$tmpfile中,但並沒有創建對應的文件。  基於模板創建臨時文件名:

$mktemp test.XXX 
test.2tc
發佈了44 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章