linuxコマンドラインツールによるテキストラインフィルタリングの方法
表示するログなどのテキストファイルをフィルタリングするタスクが日常的に発生します。たとえば、ログファイルの最後の行を表示する必要があるなどです。次に、一般的なテキスト行のフィルタリング方法をまとめます。一緒に見に行きましょう。
共通コマンドラインツール次に主にhead,tail,sed,awkというツールを使用します。ここでsedとawkツールは非常に強力で、テキストのフィルタリングに使用するには少し役に立たないかもしれませんが、基本的にすべてのタスクはheadとtailの2つのコマンドで完了することができ、headとtailの日常的な使用が便利です。
使用例
準備作業
次のコマンドを入力して、テスト用のファイルを生成します。
$ seq -f "Line No %g" 10 > lines.txt
テキストの最初の3行のみ表示headコマンドで完了できます。具体的なコマンドと出力は次のとおりです。
$ head -n 3 lines.txt
Line No 1
Line No 2
Line No 3
あるいはsedコマンドで完了し、具体的なコマンドと出力は以下の通りです。
$ sed -n '1,3p' lines.txt
Line No 1
Line No 2
Line No 3
awkコマンドも完了できます
Line No 1
Line No 2
Line No 3
テキストの最後の3行のみ表示tailコマンドを使用して完了します。具体的なコマンドと出力は次のとおりです。
$ tail -n 3 lines.txt
Line No 8
Line No 9
Line No 10
テキストの5行目から最後の1行のみを表示tailコマンドを使用して実行する方法:
$ tail -n +5 lines.txt
Line No 5
Line No 6
Line No 7
Line No 8
Line No 9
Line No 10
sedコマンドで完了します。
$ sed -n '5,$p' lines.txt
Line No 5
--略--
Line No 10
awkで完了:
$ awk 'NR>=5' lines.txt
Line No 5
--略--
Line No 10
テキストの最後から3行目から1行目のみを表示headで完成:
$ head -n -2 lines.txt
Line No 1
Line No 2
Line No 3
Line No 4
Line No 5
Line No 6
Line No 7
Line No 8
テキストの6行目から8行目のみを表示headとtailの2つのツールを使用します。
Line No 6
Line No 7
Line No 8
sedの方法:$ sed -n '6,8p' lines.txt
Line No 6
Line No 7
Line No 8
awkの方法:Line No 6
Line No 7
Line No 8
奇数行または偶数行のみ表示sedコマンドによる奇数行の生成
$ sed -n '1~2p' lines.txt
Line No 1
Line No 3
Line No 5
Line No 7
Line No 9
sedコマンド偶数行生成
$ sed -n '0~2p' lines.txt
Line No 2
Line No 4
Line No 6
Line No 8
Line No 10
awkコマンド奇数行の生成
$ awk 'NR%2' lines.txt
Line No 1
Line No 3
Line No 5
Line No 7
Line No 9
awkコマンド偶数行の生成
$ awk '(NR+1)%2' lines.txt
Line No 2
Line No 4
Line No 6
Line No 8
Line No 10
小結linuxシステムの有名な特徴は、ほとんどのファイルがテキストファイルであることです。これらのファイルは、上記の方法で特定の行を表示することができます。また、linuxコマンドラインツールも非常に柔軟で、1つのタスクを完了するには、1つの方法だけでなく、多くの方法が実現できます。これもlinuxの面白い場所です。テキストフィルタリングではsedやawkコマンドには強力な使い方がたくさんありますが、興味があれば深く検討してみてください。