用于对已轮换的日志文件进行分类的脚本

用于对已轮换的日志文件进行分类的脚本

我经常将大量日志文件合并到一个文件中。例如,文件格式为ABC_0.txt,最多为ABC_99.txt

我通常要做的是重命名单个数字,以便该数字以零为前缀,以便猫可以工作(例如,ABC_0.txt必须ABC_9.txt重命名为ABC_00.txtABC_09.txt

然后我就这样做:

cat *.txt > all.txt

效果很好。

我经常遇到这样的问题:日志文件被轮换,而实际上最早的日志文件是ABC_14.txt这样的。因此上面的 cat 行的内容将all.txt不按顺序排列。

有什么想法可以从根本上如何开始吗ABC_14.txt

为了澄清我的问题,我有日志文件 cat0.txt 到 cat9.txt 但我希望 cat 是这样的:

cat cat7.txt cat8.txt cat9.txt cat0.txt cat1.txt cat2.txt cat3.txt cat4.txt cat5.txt cat6.txt >all.txt

答案1

您可以使用 bash globes 来实现此目的:

cat ABC_[0-9]*.txt

其中只有 cats 文件以名称“ABC_”开头,后跟一个数字和一些字符,然后以 结尾.txt

答案2

如果您希望cat按修改日期对文件进行排序,您可以执行以下操作:

ls -tr ABC_* | xargs cat

它将首先根据文件的修改时间对其进行排序,然后执行cat命令

man ls
-t    sort by modification time, newest first
-r    reverse order while sorting

ls -tr将按修改时间排序,最早的在最前面


如果您想要cat以相反的顺序排列文件,您可以执行以下操作:

ls -r ABC_* | xargs cat

这将首先反转文件的顺序,然后执行cat命令

例如

$ ls -r ABC_*
ABC_03  ABC_02  ABC_01

假设每个 ABC_number 的内容是数字本身,则输出将是:

$ ls -r ABC_* | xargs cat
03
02
01

相关内容