我经常将大量日志文件合并到一个文件中。例如,文件格式为ABC_0.txt
,最多为ABC_99.txt
。
我通常要做的是重命名单个数字,以便该数字以零为前缀,以便猫可以工作(例如,ABC_0.txt
必须ABC_9.txt
重命名为ABC_00.txt
)ABC_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