👾

Linuxさんでフィルタコマンドのプロになる!②

2021/01/04に公開

はじめに

くーばねてすをやっつけるためにLinuxさんと仲良くさせていただいているが、catコマンドのほかにもたくさんの参照コマンドがたくさんあることが分かった!のでまとめようと思う。

概要

■代表的なフィルタコマンド②
・grepコマンド
・sortコマンド
・uniqコマンド
をまとめた 。

■grep(指定した検索文字列に一致する行だけを表示する)

↓指定したファイルから検索文字列だけひっぱってくる。

$ grep (オプション) 検索文字列 ファイル名

↓コマンドの結果から検索文字列をひっぱってくる。

$ コマンド | grep (オプション) 検索文字列

|オプション|意味|
| --- | --- | --- |
|-i|大文字と小文字を区別せず検索する|
|-v|一致しないものを検索する|
|-n|検索結果に行番号を表示する|
|-o|検索結果に一致した文字を表示する|
|-L|検索した結果、該当しなかったファイルを表示する|
|-l|検索した結果、該当したファイルを表示する|
|-c|検索結果が含まれている回数のみ表示|
|-s|エラーメッセージを表示しない|

■sortコマンド(順番に並べる)

$ sort (オプション) ファイル名

↓ランダムな数字が入っているファイルをsortコマンドで整理してみる。

$ cat number.txt
1
5
10
3
$ sort number.txt
1
10
3
5

あれ?1の次は3じゃないのか('_')?
sortコマンドだけだと、「最初の一文字」だけに反応して並び替えるらしい。
↓数値の1文字目ではなく、数値の値で並び替えを行いたい場合は「-n」を使用する。

$ sort -n number.txt
1
3
5
10

なった!
↓大文字小文字数字ひらがなを含むファイルをsortしてみた

$ cat abc.txt
H
h
S
s
D
9
d
1
を
あ
た
5
$ sort abc.txt
を
あ
た
1
5
9
d
D
h
H
s
S

オプションなしで文字をsortすると小文字から順に表示され、ひらがなはひらがなでまとめられるが順番は分からないようだ。文字の種類ごとにまとめられるが、オプションを付けたほうがきれいになりそう。
↓辞書順に並べる(らしい)

$ sort -f abc.txt
1
5
9
D
d
H
h
S
s
あ
た
を

数字→大文字→小文字→ひらがなの順になった!

|オプション|意味|
| --- | --- | --- |
|-n|数値の値で並び替えを行う|
|-r|数値が大きい順で並び替える(降順にsort)|
|-f|辞書順に並べる(大文字がさきになる)|
|-u|重複した行はソートしない|
|-t|区切り文字を指定|
|-k|ソートキーを指定する|

コマンドは組み合わせて実行できる。
※sort奥がほんとに深すぎて書ききれないのでいつかまとめたい!

■uniqコマンド(重複した行を取り除いて表示する)

uniqはカタカナではユニークで、「唯一の」「1つしかない」という意味。重複した行を取り除く。
uniqコマンドで処理するファイルは、あらかじめ並べ替えされていなければならないので、sortコマンドなどで並べ替えする。
なのでuniqコマンドはsortコマンドとセットで使うと覚える。

$ uniq (オプション) ファイル名

↓sortとセットで使うとき

$ sort (オプション) ファイル名 | uniq (オプション) 

↓uniqした内容を別のファイルに書き換える時は

$ uniq (オプション) 元ファイル名 書き換え先ファイル名

|オプション|意味|
| --- | --- | --- |
|-c|重複した行数も表示する|
|-d|重複行だけ出力する (それぞれ1行ずつ)|
|-D|重複行だ出力する (全部)|
|--group|重複した行たちをひとまとまりとして、空行区切りで出力する|
|-i|大文字小文字を無視する|
・sort | uniq
→ sort -u で代用できる
・uniq -i(大文字小文字を無視したい時は)
sort -f | uniq -i (sort -fで辞書順に並び替えたほうがいいかも)

$ cat abc.txt
1
5
9
D
d
H
H
h
S
S
s
1
5
$ uniq abc.txt
1
5
9
D
d
H
h
S
s
1
5

unicすると確かに重複したアルファベットは消されるんだけど、数字は消されないんだな('_')
unicでは同じ内容の行が複数続いているときにだけ重複を取り除くことができる。
同じ内容でも離れた位置にあると取り除かれず重複は残る。なのでuniqで処理するにはあらかじめsort -fで並べ替えないといけない。

まとめ

Linuxのカテゴリがあるのを今日初めて気づいた。

Discussion