1. ホーム
  2. コース一覧
  3. Linux基礎コース(パート2)
  4. Linuxコマンド [sort/uniq/diff編]

Linux基礎コース(パート2)3/9

Linuxコマンド [sort/uniq/diff編]

ここではテキストファイルを並べ替えたり比較したりするために使うコマンドsort, uniq, diffについて学んでいきます。

  • sort:テキストファイルの中身を行単位で並べ替える際に使います。
  • uniq:テキストファイルの中身で重複している行を1つにします。
  • diff:2つのテキストファイルの異なる箇所(差分)を見つけるために使います。

sortコマンド

sortとは、テキストファイルの中身を行単位で並べ替えるために使うコマンドです。

基本的な使い方

文字や数字関係なく、単純に名前で並べ替えたい場合は以下のコマンドを使用します。

ただし、中身は上書きされません。

sort ファイル名

使用例

cat fruit1.txt
grape
orange
peach
apple
banana

# sortコマンドで並び替えた場合
sort fruit1.txt
apple
banana
grape
orange
peach

数字の大小を基準に並べ替えたい場合は -nオプションを使用します。

cat number.txt
34
273
7
7628
100

# sort -n コマンドで並び替えた場合
sort -n number.txt
7
34
100
273
7628

並べ替えの際に逆順で表示するには -rオプションを使用します。

sort fruit1.txt
apple
banana
grape
orange
peach

# sort -r コマンドで並び替えた場合
sort -r fruit1.txt
peach
orange
grape
banana
apple

並べ替えの際には空白ごとにフィールドが分けられ、デフォルトでは1つ目のフィールドを基準に並べ替えが行われます。

1つ目のフィールド以外を基準に並べ替えたいときは -kオプションを使用します。

cat fruit2.txt
001 grape むらさき
002 orange おれんじ
003 peach ももいろ
004 apple あか
005 banana きいろ

# sort -k コマンドで、2つ目のフィールドを基準に並び替えた場合
sort -k 2 fruit2.txt
004 apple あか
005 banana きいろ
001 grape むらさき
002 orange おれんじ
003 peach ももいろ

その他オプション

オプション意味
-f大文字小文字を区別しないで並べ替える
-u同一行は1つ目だけを出力する

uniqコマンド

uniqとは、テキストファイルの中身で重複した行を1つにするために使用するコマンドです。

基本的な使い方

uniq ファイル名

ただし、uniqは隣り合った行で重複したものしか1つにできないため、sortと組み合わせて使うとよいでしょう。

sort ファイル名 | uniq

使用例

cat fruit3.txt
001 grape ぶどう
002 orange オレンジ
003 peach もも
003 peach もも
004 apple りんご
005 banana バナナ
003 peach もも

# uniqは隣り合った行で重複したものしか1つにできない(6行目の「003 peach もも」が残っている)
uniq fruit3.txt
001 grape ぶどう
002 orange オレンジ
003 peach もも
004 apple りんご
005 banana バナナ
003 peach もも

# 'sort ファイル名 | uniq' を使うことで、離れた重複行も1つにできる
# ('sort -u fruit3.txt' でも同様の結果になる)
sort fruit3.txt | uniq
001 grape ぶどう
002 orange オレンジ
003 peach もも
004 apple りんご
005 banana バナナ

その他オプション

オプション意味
-i大文字小文字を区別しないで重複行を1つにする
-c重複している行をカウントする
-u重複していない行だけを出力する
-d重複した行だけを出力する

diffコマンド

diffとは、2つのテキストファイルを比較し、異なる箇所(差分)を出力するコマンドです。

diff [1つ目のファイル名] [2つ目のファイル名]

使用例

行を削除した場合

cat fruit2.txt
001 grape むらさき
002 orange おれんじ
003 peach ももいろ
004 apple あか
005 banana きいろ

# 3行目を削除しました。
cat fruit4.txt
001 grape むらさき
002 orange おれんじ
004 apple あか
005 banana きいろ

diff fruit2.txt fruit4.txt
3d2
< 003 peach ももいろ

※ 3d2:「fruit4.txt」の3行目が削除(d:Delete)され、以降の行が2行目後まで移動している

行を追加した場合

cat fruit2.txt
001 grape むらさき
002 orange おれんじ
003 peach ももいろ
004 apple あか
005 banana きいろ

# 6行目を追加しました。
cat fruit5.txt
001 grape むらさき
002 orange おれんじ
003 peach ももいろ
004 apple あか
005 banana きいろ
006 strawberry あか

diff fruit2.txt fruit5.txt
5a6
> 006 strawberry あか

※ 5a6:「fruit5.txt」の5行目の直後に6行目が追加(a:Append)されている

行を変更した場合

cat fruit2.txt
001 grape むらさき
002 orange おれんじ
003 peach ももいろ
004 apple あか
005 banana きいろ

# 3, 4行目を変更しました。
cat fruit6.txt
001 grape むらさき
002 orange おれんじ
003 lemon きいろ
004 watermelon みどり
005 banana きいろ

diff fruit2.txt fruit6.txt
3,4c3,4
< 003 peach ももいろ
< 004 apple あか
---
> 003 lemon きいろ
> 004 watermelon みどり

※ 3,4c3,4:「fruit2.txt」の3行目4行目が「fruit6.txt」の3行目4行目に変更(c:Change)されている

その他オプション

オプション意味
-s単純にファイルが同一のものかどうかを表示する(同一の場合はその旨を表示する)
-qファイルが異なるかのみチェックし、同一の場合は結果を出力しない
-y比較した結果を横並びで表示する(差分のある行は「
-rディレクトリ同士で比較する

まとめ

今回はsort uniq diff コマンドについて解説しました。

今回紹介した以外のオプションや、複数のオプションを組み合わせた並び替えをすることもできますので、ご自身でも調べてみてください。

3つのコマンドを理解することで、Linuxでテキストファイルを用いた高度な操作ができるようになります。

問題を解くためには、十分な画面サイズのPC環境をご利用下さい。