Working on a Unix system, I just needed to reverse the contents of a file, and thought I'd show how I ended up doing it.
My file-reversal needs
For my situation I needed to (a) get 10 lines from the end of a file, (b) reverse those ten lines, and (c) save them to another file. If my Unix system supported the
-r option of the
tail command this would have been a no-brainer, but it didn't, so I had to work a little harder.
I ended up using this sequence of commands (including the Perl reverse function call) to solve my file line-reversal problem:
tail my_data_file | perl -e 'print reverse <>' > my_output_file
That sequence of commands can be read as "get the last ten lines from the file named
my_data_file, then reverse those lines, and write them to
Working with a file instead of a pipe
If you actually need to work with a file directly (instead of the command pipeline I just showed) you can take the following approach.
Assume that you have a file named
foo that has the contents shown below when you
cat the file out:
prompt> cat foo 5 1 m a z 2
To reverse the file contents just use the Perl reverse command I showed earlier, but this time specify the filename
prompt> perl -e 'print reverse <>' foo 2 z a m 1 5
As you can see it reverses the file contents. To be clear, this is not a sort of the file contents, I'm just reversing the lines from the original file.
As I mentioned, if your
tail command supports the
-r option that's probably the most obvious route, but mine did not. From what I've read there is also a
tac utility available (the reverse of
cat) which does the same thing. I read that this can also be done with
sed, but I prefer this perl solution.