Needed to manually create some basic web statistics using awstats (a one shot statistic). My approach was to get all the rotated logs and create one big access log. I wanted the lines of that access log in the correct order to avoid awstats tumbling.
First I unzipped all rotated logs:
gunzip *gz
Then I needed to get the log entries from rotated file 40 down to rotated file 9. But here's the catch: How do I count down without having to note every single number from 40 to 9 (that would be something like for i in 40 39 38 37, etc)? I know how to automatically count up using seq:
$ seq 1 5
1
2
3
4
5
So I needed to find a way to count backwards. The solution? seq again :)
seq offers an optional parameter between the starting and the ending number. From the help output:
$ seq help
Usage: seq [OPTION]... LAST
or: seq [OPTION]... FIRST LAST
or: seq [OPTION]... FIRST INCREMENT LAST
Print numbers from FIRST to LAST, in steps of INCREMENT.
[...]
Example: Count up to 10 but increase with 2 numbers:
$ seq 1 2 10
1
3
5
7
9
The INCREMENT number can be negative, too:
$ seq 10 1 1
10
9
8
7
6
5
4
3
2
1
And this is actually the way to count down. To put together all rotated logs in the correct order, I finally used the following command:
$ for i in $(seq 40 1 9); do cat access.log.$i >> final.access.log; done
