2.10临时文件命名与随机数2.11
编写shell脚本时,经常需要存储临时数据,系统中最适合存储临时数据的位置/tmp(该目录中的内容在系统重启后会清空)。
1)创建临时文件
$ filename=`mktemp`
$ echo $filename
/tmp/tmp.8xvhkjF5fH
上面的代码创建了一个临时文件,并打印出存储在$filename中的文件名。
2)创建临时目录
$ dirname=`mktemp -d`
$ echo $dirname
tmp.NI8xzW7VRX
上面的代码创建了一个临时目录,并打印出存储在$dirname中的目录名
3)如果想仅仅想生成文件名,又不希望创建实际的文件或目录,
$ tmpfile=`mktemp -u`
$ echo $tmpfile
/tmp/tmp.RsGmilRpcT
文件名存储在$tmpfile中,但并没有创建对应的文件
4)根据模板创建临时文件名
$ mktemp test.XXX
text.2c
工作原理:mktemp它生成一个临时文件并返回其文件名(如果创建的是目录,返回目录名),如果提供了定制模板,X会被随机的字符(数字或字母)替换,注意,mktemp正常工作的前提是保证模板中至少要有3个X。
2.11分割文件和数据
1)工作原理
假设有一个文件data.file,其大小为100KB,将它分割成多个大小为10KB的文件,如下
$ split -b 10k data.file
$ ls
data.file xaa xab xac xad xae xaf xag xah xai xaj
这些文件以xab,xac,xad形式命名,这表明他们都有一个字母后缀,可以使用-d参数来以数字后缀,以及-a 指定后缀长度,如
$ split -b 10k data.file -d -a 4
除了k(KB)后缀,还有M(MB),G(GB),c(byte),w(word)。
2)补充内容
a、为分割后的文件指定文件名前缀
之前那些分割后的文件都有一个文件名前缀x,下面使用自己自定义的前缀,其格式如下
$ split [COMMAND_ARGS] PREFIX
如
$ split -b 10k data.file -d -a 4 split_file
如果不像按照数据块大小,而是需要根据行数来分割文件的话,可以使用-l no_of_lines,如
$ split -l 10 data.file
#分割多个文件,每个文件包含10行
b、csplit,它能够根据指定的条件和字符串匹配选项对日志文件进行分割。它是split工具的一个变体,split只能根据数据大小或行数分割文件,而csplit可以根据文本自身的特点进行分割--是否存在某个单词或文本内容都可以作为分割文本的条件。
如,把一个log里面含有多个SERVER的部分分割成多个log文件
$ csplit server.log /SERVER/ -n 2 -s {*} -f server -b "%02d.log" ; rm server00.log
$ ls
server01.log server02.log server03.log server.log
/SERVER/:用来匹配某一行,分割过程即从此处开始
/[REGEX]/:表示文本样式,包括从当前行(第一行)直到(但不包括)包含“SERVER”的匹配行。
{*}:表示根据匹配重复执行分割,直到文件末尾为止,可以用{整数}的形式来指定分割执行的次数。
-s使命令进入静默模式,不打印其他信息
-n指定分割后的文件名后缀的数字个数,例如01,02,03等
-f指定分割后的文件名前缀
-b指定后缀格式。例如%02d.log,类似于c语言中的printf的参数格式。
因为上面分割后的第一个文件没有任何内容(匹配的单词就位于文件的第一行中),所以我们删除了server00.log。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】