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。

 

posted on   gary_123  阅读(461)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 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】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示