Linux Shell脚本攻略-行排序+uniq+临时文件命名与随机数

行排序

uniq一般和sort一起使用,因为uniq命令要求输入数据必须经过排序

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

# 按照数字顺序排列
sort -n file.txt
# 按照逆序排序
sort -r file.txt
# 按照月份排序(依照一月、二月、三月等)
sort -M month.txt
# 合并两个已排序过的文件
sort -m sorted1 sorted2
# 找出已排序文件中不重复的行
sort file1.txt file2.txt | uniq
# 检查文件是否已经排序过
#!/bin/bash
sort -C filename;
if [$? -eq 0]; then
	echo Sorted;
else
	echo Unsorted;
fi
# 如果文件已经排序,sort会返回为0的退出码($?),否则返回非0

# 依据键或列排序
$ cat data.txt
1	mac	2000
2	winxp	4000
3	bsd	1000
4	linux	1000
## -k指定排序所依据得字符,如果是单个数字,则指的是列号,-r告诉sort命令按照逆序进行排序
## 依据第1列,以逆序形式排序
$ sort -nrk 1 datat.txt
4	linux	1000
3	bsd	1000
2	winxp	4000
1	mac	2000
## 依据第2列进行排序
$ sort -k 2 data.txt
3	bsd	1000
4	linux	1000
1	mac	2000
2	winxp	4000
## -k后得整数制定了文本文件中得某一列。列与列之间由空格分隔,如果需要将特定范围内得一组字符(例如,第2列中得第4-5个字符)作为建,应该使用由点号分隔得两个整数来定义一个字符位置,然后将该范围内得第一个字符和最后一个字符用逗号连接起来

$ cat data.txt
1`alpha	300
2	beta	200
3	gamma	100
$ sort -bk 2.3,2.4 data.txt; # 按照m、p、t的顺序排序
3	gamma	100
1	alpha	300
2	beta	200
## 用第一个字符作为键
$ sort -nk 1,1 data.txt

# 为了使sort的输出与以\0作为终止符的xargs命令相兼容,采用以下命令
$ sort -z data.txt | xargs -0

# 有时文本中可能会包含一些像空格之类的多余字符,如果需要忽略标点符号并以字典序排序,可以使用
$ sort -bd unsorted.txt
## 其中-b用来忽略文件中的签到空白行,选项-d用于指明以字典序进行排序

uniq

uniq命令可以从给定输入中(stdin或命令行参数指定的文件)找出唯一的行,报告或删除那些重复的行
uniq只能用于排过序的数据,因此,uniq通常都与sort命令结合使用

$ cat sorted.txt
bash
foss
hack
hack

# uniq生成唯一的行
$ uniq sorted.txt
bash
foss
hack
# 也可以这样
$ sort unsorted.txt|uniq

# 只显示唯一的行(在输入文件中没有重复出现的行)
$ 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

# 可以结合-s和-w选项来指定键
## -s 指定跳过前N个字符
## -w 指定用于比较的最大字符数
$ cat data.txt
u:01:gnu
d:04:linux
u:01:bash
u:01:hack

$ sort data.txt | uniq -s 2 -w 2
d:04:linux
u:01:bash
## -s 2 跳过前两个字符
## -w 2 指定后续的两个字符

# -z选项可以生成由0值字节终止的输出
$ uniq -z file.txt
$ uniq -z file.txt | xargs -0 rm

临时文件命名与随机数

shell脚本经常需要存储临时数据,最适合存储临时数据的位置是/tmp(该目录中的内容在系统重启后会被清空)。有两种方法可以为临时数据生成标准的文件名

# 创建临时文件
$ filename=`mktemp`
$ echo $filename
/tmp/tmp.8xvhkjF5fH

# 创建临时目录
$ dirname=`mktemp -d`
$ echo $dirname
tmp.NI8xzW7VRX

# 仅仅只是想生成文件名,不希望创建实际的文件或目录
$ tmpfile=`mktemp -u`
$ echo $tmpfile
/tmp/tmp.RsGmilRpcT

# 基于模板创建临时文件名
## 注意模板中至少药有3个X
$ mktemp test.XXX
test.2tc
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值