4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Linux】テキスト処理(wc、sort、uniq、diffコマンド)実践的な使い方

4
Last updated at Posted at 2021-11-17

はじめに

どうも、未経験からエンジニア転職を目指しているもきおです。

今回は輪読会でどうせ発表するならQiita記事にしちゃおうと思ったのでLinuxの テキスト処理に触れていきたいと思います。

第二弾はこちら

今回の記事は新しいLinuxの教科書を参考にしています。
とてもLinux標準の教科書もやった事はありますが、よりわかりやすくまとまっているのでLinuxを学びたい方におすすめです!

テキスト処理って?

ターミナルでの出力結果を項目に絞ったり、並べ替えたり、差分を表示したりコマンドを加工する事によってより自分自身が見やすく必要な項目に整理することができるようにするのがテキスト処理だと自分自身は感じています。

より高度なテキスト処理になると置換処理、パターン一致検索等もコマンド実行により可能です。
今回は良く使いそうなコマンドに絞って記載していこうと思います。

WCコマンド

WCは入力ファイルの行数、単語数、バイト数を数えるコマンドです。
今回はよく使用する「-l」オプションを使用しました。

WCコマンド
$ wc -l /etc/passwd
21 /etc/passwd ←行数を表示
↑行数 ↑ファイル名

行数を把握する事によって1行に1件の測定データがある場合はデータの件数を把握することができます。

sortコマンド

sortは行単位で並べ替えを行うことができるコマンドです。

例:file1の内容が以下の場合

file1
Hokkaido
Aomori
Iwate
Miyagi
Akita
Yamagata
Fukusima
アルファベット順に並べ替え
$ sort file1
Akita
Aomori
Fukusima
Hokkaido
Iwate
Miyagi
Yamagata

通常のソートコマンドだとアルファベット順に並べ替えられます。
他にも「-n」で数値順、「-r」で逆順に並べ替えることができます。

このコマンドが実際に役に立ってくるのはpsコマンドでターミナル上でプロセス(実行状態にあるプログラム)を確認する際に自分が確認したいプロセスをいち早く見つけるのに役立ちます。

pxに対する「ax」オプションは全てのユーザーのプロセスを表示するオプション。
「-k」はフィールド番号を指定しています。今回はコマンドフィールド5番目の実行コマンドを確認したいので以下のように記載しています。

アルファベット順に並べ替え
$ ps ax | sort -k 5
8155 pts/0 Ss 0:00 -bash ←プロセスの例、実行コマンドは5番目に記載されている

これによってプロセスをASCII(アスキー)コード順に並べ替えることができます。

uniqコマンド

uniqコマンドは連続した同じ内容の行を省くコマンドです。

file2
Hokkaido
Hokkaido
Aomori
Iwate
Iwate
Akita
Yamagata
Fukusima
重複を省く
$ uniq file2
Hokkaido
Aomori
Iwate
Akita
Yamagata
Fukusima

「Hokkaido」、「Iwate」の重複を省き一つになりました。

続いて以下のファイルだとどうなるでしょうか?

file3
Hokkaido
Hokkaido
Aomori
Iwate
Hokkaido
$ uniq file3
Hokkaido
Aomori
Iwate
Hokkaido ←重複が残る

最後の「Hokkaido」が残ってしまいました。
連続していないと重複を削除することができないみたいです。

この場合は一旦sortで並べ替えて重複行を連続させてからuniqで省く事によって解消できます。

$ sort file3 | uniq
Aomori
Hokkaido
Iwate

diffコマンド

diffコマンドは、二つのファイルの差分を表示するコマンドです。

書式
diff 【オプション】 (比較元ファイル) (比較先ファイル)

diffによる差分表示には様々な出力形式がありますが、今回はよく使われる形式として「-u」オプションを使用した「ユニファイド形式」を使用した例を記載したいと思います。

$ diff -u file1 file2
--- file1 2012-07-06 13:21:21.219249366 +0900
+++ file2 2012-07-06 13:26:51.664814277 +0900
@@ -3,1 +3,2 @@
-test text
+overwrite text
+new line

最初の二行で二つのファイルのファイル名と更新日時が表示されます。3行目から差分表示になります。

最初の@@から始まる行はその差分表示が元のファイルの何行目に対応しているかを表しています。これを「@@ -(一つ目のファイルの変更開始行),(変更行する) +(二つ目のファイルの変更開始行),(変更行数) @@」という形式で表します。

今回でいう「@@ -3 +3,2 @@」は

  • 一つ目のファイルにおいては3行目から1行分
  • 二つ目のファイルにおいては3行目から2行分
    に対応していることを意味しています。

あとは「-」記号は削除された行、「+」記号で始まるものは追加された行を表示しています。

あとがき

いかがだったでしょうか?

これらのコマンドを使いこなせるようになる事によって実務での開発効率を上げることができそうですね。早く実践で使用していけるよう日々基礎固めをしていきたいと思います。

最後までご覧いただきありがとうございました!!

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?