テキストファイルの行順序を逆にする最も簡単な方法【CentOS tac コマンド】

インフラサーバ

やりたいこと

あるテキストファイルが存在するときに、そのテキストファイルの行順序を逆にしたテキストファイルを作成したい。

例えば以下の内容のテキストファイルがあったとします。

1xxxxxxxxxxxxxxxxx
2xxxxxxxxxxxxxxxxx
3xxxxxxxxxxxxxxxxx
4xxxxxxxxxxxxxxxxx
5xxxxxxxxxxxxxxxxx

作成したいファイルの内容は以下です。

5xxxxxxxxxxxxxxxxx
4xxxxxxxxxxxxxxxxx
3xxxxxxxxxxxxxxxxx
2xxxxxxxxxxxxxxxxx
1xxxxxxxxxxxxxxxxx

テキストファイルの行順序を逆にする方法

手順は以下の通りです。

手順
  1. CentOS マシンを用意する
  2. 行順序を逆にしたいテキストファイルを CentOS マシンに格納する
  3. CentOS 上で # tac <対象ファイル名> を実行し、出力をリダイレクトでファイルに保存する
  4. 保存したファイルを 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 の使い方
  1. コマンドプロンプトを開き、busybox.exe をダウンロードしたフォルダをカレントディレクトリにする
  2. 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 コマンド及びリダイレクトも使用することができます。

busybox を使用したコマンド実行の処理速度は CentOS 上でコマンドを実行するよりも明らかに遅くなることを確認しています。

タイトルとURLをコピーしました