欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

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

时间:2023-07-27
行排序

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

sort file1.txt file2.txt > sorted.txtsort 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/bashsort -C filename;if [$? -eq 0]; thenecho Sorted;elseecho Unsorted;fi# 如果文件已经排序,sort会返回为0的退出码($?),否则返回非0# 依据键或列排序$ cat data.txt1mac20002winxp40003bsd10004linux1000## -k指定排序所依据得字符,如果是单个数字,则指的是列号,-r告诉sort命令按照逆序进行排序## 依据第1列,以逆序形式排序$ sort -nrk 1 datat.txt4linux10003bsd10002winxp40001mac2000## 依据第2列进行排序$ sort -k 2 data.txt3bsd10004linux10001mac20002winxp4000## -k后得整数制定了文本文件中得某一列。列与列之间由空格分隔,如果需要将特定范围内得一组字符(例如,第2列中得第4-5个字符)作为建,应该使用由点号分隔得两个整数来定义一个字符位置,然后将该范围内得第一个字符和最后一个字符用逗号连接起来$ cat data.txt1`alpha3002beta2003gamma100$ sort -bk 2.3,2.4 data.txt; # 按照m、p、t的顺序排序3gamma1001alpha3002beta200## 用第一个字符作为键$ sort -nk 1,1 data.txt# 为了使sort的输出与以作为终止符的xargs命令相兼容,采用以下命令$ sort -z data.txt | xargs -0# 有时文本中可能会包含一些像空格之类的多余字符,如果需要忽略标点符号并以字典序排序,可以使用$ sort -bd unsorted.txt## 其中-b用来忽略文件中的签到空白行,选项-d用于指明以字典序进行排序

uniq

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

$ cat sorted.txtbashfosshackhack# uniq生成唯一的行$ uniq sorted.txtbashfosshack# 也可以这样$ sort unsorted.txt|uniq# 只显示唯一的行(在输入文件中没有重复出现的行)$ uniq -u sorted.txtbashfoss$ sort unsorted.txt|uniq -u# 统计各行在文件中出现的次数$ sort unsorted.txt | uniq -c1bash1foss2hack# 找出文件中重复的行$ sort unsorted.txt | uniq -dhack# 可以结合-s和-w选项来指定键## -s 指定跳过前N个字符## -w 指定用于比较的最大字符数$ cat data.txtu:01:gnud:04:linuxu:01:bashu:01:hack$ sort data.txt | uniq -s 2 -w 2d:04:linuxu: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 $dirnametmp.NI8xzW7VRX# 仅仅只是想生成文件名,不希望创建实际的文件或目录$ tmpfile=`mktemp -u`$ echo $tmpfile/tmp/tmp.RsGmilRpcT# 基于模板创建临时文件名## 注意模板中至少药有3个X$ mktemp test.XXXtest.2tc

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。