やりたいこと
あるテキストファイルが存在するときに、そのテキストファイルの行順序を逆にしたテキストファイルを作成したい。
例えば以下の内容のテキストファイルがあったとします。
1xxxxxxxxxxxxxxxxx
2xxxxxxxxxxxxxxxxx
3xxxxxxxxxxxxxxxxx
4xxxxxxxxxxxxxxxxx
5xxxxxxxxxxxxxxxxx
作成したいファイルの内容は以下です。
5xxxxxxxxxxxxxxxxx
4xxxxxxxxxxxxxxxxx
3xxxxxxxxxxxxxxxxx
2xxxxxxxxxxxxxxxxx
1xxxxxxxxxxxxxxxxx
テキストファイルの行順序を逆にする方法
手順は以下の通りです。
- CentOS マシンを用意する
- 行順序を逆にしたいテキストファイルを CentOS マシンに格納する
- CentOS 上で
# tac <対象ファイル名>
を実行し、出力をリダイレクトでファイルに保存する - 保存したファイルを CentOS マシンから取り出す
CentOS マシンを用意する方法
これは Windows 上に VMware Workstation Player などの仮想化ソフトを導入して、そのソフト上に仮想マシンとして CentOS をインストールするのが最も簡単でしょう。
CentOS の tac コマンド
tac
コマンドを使用すると、指定したファイルの内容を最終行から先頭行の順に出力することができます。cat
コマンドとはコマンド名も出力順序も逆になります。
# cat sampletext.txt
1xxxxxxxxxxxxxxxxx
2xxxxxxxxxxxxxxxxx
3xxxxxxxxxxxxxxxxx
4xxxxxxxxxxxxxxxxx
5xxxxxxxxxxxxxxxxx
# tac sampletext.txt
5xxxxxxxxxxxxxxxxx
4xxxxxxxxxxxxxxxxx
3xxxxxxxxxxxxxxxxx
2xxxxxxxxxxxxxxxxx
1xxxxxxxxxxxxxxxxx
この tac コマンドとリダイレクトを利用することで、行順序を逆にしたテキストファイルを簡単に得ることができます。リダイレクトを利用するとコマンド出力をそのままファイルに保存することができます。
tac <対象ファイル名> > <出力ファイル名>
# tac sampletext.txt > sampletext_reverse.txt
# cat sampletext_reverse.txt
5xxxxxxxxxxxxxxxxx
4xxxxxxxxxxxxxxxxx
3xxxxxxxxxxxxxxxxx
2xxxxxxxxxxxxxxxxx
1xxxxxxxxxxxxxxxxx
なぜこんなことをしたいと思ったのか
C言語であるプログラムを作成していた時のことですが、テキストファイルを読み込む処理を作成しようとしていました。
テキストファイルの読み込みは基本的に先頭行から最終行に向かっての方向にのみ行うことができるのですが、この時は最終行から先頭行に向かっての方向で読み込む必要がありました。
ですが調査した結果そのようなことはできなさそうでした。この時、行順序が逆になっているテキストファイルをあらかじめ作成しておくしかないなという結論になり、これをしようと思いつきました。
【参考】Windows で Linux コマンドを使用する方法
わざわざ CentOS マシンを用意するのが面倒な場合は、Windows 上で Linux コマンドを使用できるようになる busybox
というツールを使用することもできます。
これを使用するまでの手順は以下です。
BusyBox for Windows のページにアクセスし、画面下の方にある Downloads 欄の busybox.exe のリンクをクリックします。

すると busybox.exe をダウンロードできるため、任意のフォルダにダウンロードします。
準備はこれだけです。
busybox を使用した Linux コマンドの使い方は以下です。
- コマンドプロンプトを開き、busybox.exe をダウンロードしたフォルダをカレントディレクトリにする
busybox.exe <Linux コマンド>
の構文でコマンドを実行する
C:\Users\user01\Desktop>busybox.exe cat sampletext.txt
1
2
3
4
5
C:\Users\user01\Desktop>busybox.exe tac sampletext.txt
5
4
3
2
1
C:\Users\user01\Desktop>busybox.exe tac sampletext.txt > sampletext_reverse.txt
C:\Users\user01\Desktop>busybox.exe cat sampletext_reverse.txt
5
4
3
2
1
C:\Users\user01\Desktop>
上記のように tac
コマンド及びリダイレクトも使用することができます。