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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章