【初学者向け】フィルタを使ってテキストストリームを処理してみる

Linuxのコマンドではテキストデータをフィルタすることができます。
今回は、そのなかでいくつかピックアップして実際どのように
フィルタされるのか検証していきたいと思います。

今回取り上げるのはこちらのコマンドです。

・head
・tail
・wc
・sort
・paste
・cut

それでは実際にファイルを作成してコマンドを叩いていきます。

 

検証環境

 

今回は、VMware Workstation 16 player上のRHEL8.4にて動作させています。

また、下記テキストファイルを事前に作成済みです。
・demo1.txt
・demo2.txt

 

【demo1.txt】

[root@localhost ~]# cat demo1.txt
1
2
3
4
5
tokyo
7
8
9
10

 

【demo2.txt】

【demo2.txt】
[root@localhost ~]# cat demo2.txt
tokyo
osaka
aichi
hokkaido
hukuoka
kyoto
saitama
chiba
nagano
ibaraki

以上が作成したファイルの内容です。

皆さんも任意にファイルを作成してトライしてみてください。

 

headコマンド

 

headコマンドは、オプションを設定しないとファイルの先頭10行を表示させることができます。

また、オプションを使用すると「行数の指定」や「バイト数の指定」ができます。

■基本構文

構文:head [オプション名] ファイル名

例えばdemo2.txtの3行目までのみ表示させたい場合は、「-n 3」でできます。

 

[root@localhost ~]# head -n 3 demo2.txt
tokyo
osaka
aichi

 

実際にdemo2.txtの中身が3行のみ出力されていることがわかりました。

ファイルの中身が多くなってきたときなどに使いたいコマンドですね。

 

tailコマンド

 

tailコマンドは、headコマンドが先頭からの行数を表示させるのに対して

ファイルの末尾から10行を表示させることができます。

■基本構文

構文:tail [オプション名] ファイル名

 

先ほどと同じdemo2.txtで末尾3行を表示させてみます。

 

[root@localhost ~]# tail -n 3 demo2.txt
chiba
nagano
ibaraki

 

実際末尾3行のみが出力されました。

ログファイルや時系列順に蓄積されていくようなファイルに適用することが便利ですね。

 

wcコマンド

 

wcコマンドは、指定したファイルの行数、単語数、文字数を表示できます。

この3つの項目は、オプションでそれぞれ個別に表示させることも可能ですが、

今回はすべて表示させてみます。

■基本構文

構文:wc [オプション名] ファイル名

 

[root@localhost ~]# wc demo2.txt
10 10 70 demo2.txt

 

表示することができました。

 

sortコマンド

 

sortコマンドは、ファイルの行単位で内容をソートすることが可能です。

なにもオプションを使用しなければ昇順にソートされます。

■基本構文

構文: sort [ オプション ] [ +開始位置 ] [ -終了位置 ] [ ファイル名 ]

demo1.txtを使用して叩いてみます。

[root@localhost ~]# sort demo1.txt

1
10
2
3
4
5
7
8
9
tokyo

数字の部分は、数の大きさではなく先頭の文字を判断してソートされています。

数字とアルファベットが混ざっていたのが、数字をすべて先にソートしてくれています。

これをdemo2.txtのほうでも実施してみると

 

[root@localhost ~]# sort demo2.txt
aichi
chiba
hokkaido
hukuoka
ibaraki
kyoto
nagano
osaka
saitama
tokyo

 

こちらは全ての行がアルファベットなのですが、

アルファベット順にソートされていることがわかりました。

 

他にも、下記のオプションを使用することができます。
「-b」 行頭の空白を無視
「-f」 大文字小文字の区別を無視
「-r」 降順にソート

 

pasteコマンド

 

pasteコマンドでは、1つ以上のファイルから一致する行を区切り文字を使用して連結することができます。

■基本構文

構文:: paste [ オプション ] ファイル名1 ファイル名2

今回、区切り文字に「,」を使用してdemo1.txt,demo2.txtを連結していきます。

 

[root@localhost ~]# paste -d"," demo1.txt demo2.txt
1,tokyo
2,osaka
3,aichi
4,hokkaido
5,hukuoka
tokyo,kyoto
7,saitama
8,chiba
9,nagano
10,ibaraki

 

それぞれのファイルの同じ行が「,」で連結されているのがわかります。

 

cutコマンド

cutコマンドでは指定したフィールドをテキストファイルの各行から取り出すことができるコマンドです。

■基本構文

構文: : cut [ オプション ] ファイル名

 

オプションを使用して、いろんな方法で取り出す内容を指定することも可能です。

 

「-b」取り出す位置をバイトで指定
「-c」取り出す位置を文字数で指定
「-d」区切り文字を指定
「-f」取り出すフィールド番号を指定

 

今回はdemo2.txtファイルを各行から1文字目~3文字目のみ取り出してみます。

 

[root@localhost ~]# cut -c 1-3 demo2.txt
tok
osa
aic
hok
huk
kyo
sai
chi
nag
iba

 

それぞれ抽出されました。

 

まとめ

ファイルを操作したり見たい内容をすぐに取り出せることは業務の効率化に直結する部分なので、
きちんとコマンドを使いこなせるようになってどんどん作業スピードを上げていきたいです!

Last modified: 2023-08-23

Author