Linuxのsortとuniqコマンドの詳細解説

sortコマンド

テキストファイルの内容を行単位で並び替えるためのコマンドです。

sort [オプション] [ファイル名]

主なオプション:

  • -b: 行頭の空白文字を無視する
  • -c: ファイルがすでにソートされているかチェックする
  • -d: 英字、数字、空白以外の文字を無視してソート
  • -f: 大文字小文字を区別しないでソート
  • -i: ASCIIコード040〜176以外の文字を無視
  • -m: 複数のソート済みファイルをマージ
  • -M: 月の略称でソート
  • -n: 数値としてソート
  • -o: 結果を指定ファイルに出力
  • -r: 降順でソート
  • -t: フィールド区切り文字を指定
  • -k: ソート対象のフィールド範囲を指定
  • -u: 重複行を削除して出力

比較は各行を単位として、先頭からASCIIコード値で比較し、昇順に出力されます。

使用例:

ls -l | sort -n -k5

これは、5番目のフィールドを数値順にソートします。-tオプションで区切り文字を指定することも可能です。

元データ デフォルトソート結果 -uオプション使用 -oオプション使用
apple
pear
orange
pear
1
2
10
1
10
2
apple
orange
pear
pear
1
10
2
apple
orange
pear
sort test.txt > test.txt ではファイルが空になる
sort test.txt -o test.txt で正しく書き込み可能

その他の例:

sort -t ' ' -k 3nr -k 2n facebook.txt

3番目のフィールドで降順ソートし、同じ場合は2番目のフィールドで昇順ソートします。

uniqコマンド

ソートされたデータから重複行を取り除くコマンドです。

uniq [オプション] [入力ファイル] [出力ファイル]

主なオプション:

  • -u: 一度しか出現しない行のみ表示
  • -d: 重複している行のみ表示
  • -c: 各行の出現回数を表示
  • -f n: 先頭n個のフィールドを無視
  • -s n: 先頭n文字を無視して比較
  • -w n: 最初のn文字のみを比較対象とする
  • -i: 大文字小文字を区別しない

※ 重複していない行が隣接していない場合、uniqは正常に動作しないため、事前にsortでソートしておく必要があります。

使用例:

元データ -cオプション -uオプション
e bsd 1000 600 4M
c win7 2000 100 7G
d winxp 4000 300 3G
d winxp 500 300 3G
g winxp 500 300 3G
g winxp 500 300 3G
G WINXP 500 300 3G
1 e bsd 1000 600 4M
1 c win7 2000 100 7G
1 d winxp 4000 300 3G
1 d winxp 500 300 3G
2 g winxp 500 300 3G
1 G WINXP 500 300 3G
e bsd 1000 600 4M
c win7 2000 100 7G
d winxp 4000 300 3G
d winxp 500 300 3G
G WINXP 500 300 3G

タグ: linux Shell command-line text-processing sort

6月16日 22:20 投稿