📑

sort commandのoptionが便利

2021/12/20に公開

背景

普段使ってるPOSIXのcommandも意外と知らないオプションとか多いよなって思ったので、調べてみようシリーズ.
sortでoption調べてたらいろいろ便利そうなものがあったのでメモ.

usage

help

NAME
     sort – sort or merge records (lines) of text and binary files

SYNOPSIS
     sort [-bcCdfghiRMmnrsuVz] [-k field1[,field2]] [-S memsize] [-T dir] [-t char] [-o output] [file ...]
     sort --help
     sort --version

ファイル容量でソート

-h つけるとBtye/KiloByte/MegaByte/... などで読みやすい単位に直してくれる.
これを大きい順にsortする時に便利

$ ls -lha
total 552
drwxr-xr-x  22 mattak  staff   704B 12 20 01:53 .
drwxr-xr-x  18 mattak  staff   576B 12 20 22:10 ..
drwxr-xr-x  13 mattak  staff   416B 12 20 22:22 .git
drwxr-xr-x   3 mattak  staff    96B 12 16 23:24 .github
-rw-r--r--   1 mattak  staff   1.3K 12 16 23:18 .gitignore
drwxr-xr-x   3 mattak  staff    96B 12 16 23:47 .idea
-rw-r--r--   1 mattak  staff    49K 12 20 00:48 Assembly-CSharp.csproj
drwxr-xr-x  20 mattak  staff   640B 12 20 00:30 Assets
-rw-r--r--   1 mattak  staff    48K 12 20 00:48 EditTset.csproj
drwxr-xr-x  34 mattak  staff   1.1K 12 20 01:53 Library
drwxr-xr-x  16 mattak  staff   512B 12 20 00:21 Logs
drwxr-xr-x   4 mattak  staff   128B 12 16 23:00 Packages
-rw-r--r--   1 mattak  staff   3.1K 12 20 00:22 PluginAndroid.csproj
-rw-r--r--   1 mattak  staff    49K 12 20 00:48 PluginBase.csproj
-rw-r--r--   1 mattak  staff    50K 12 20 00:48 PluginEditor.csproj
-rw-r--r--   1 mattak  staff   3.1K 12 20 00:30 PluginIOS.csproj
-rw-r--r--   1 mattak  staff    49K 12 20 00:48 PluginNative.csproj
drwxr-xr-x  21 mattak  staff   672B 12 17 23:01 ProjectSettings
-rw-r--r--   1 mattak  staff   2.7K 12 20 00:30 SampleGameCI.sln
-rw-r--r--   1 mattak  staff   3.0K 12 17 00:17 Tests.csproj
drwxr-xr-x   4 mattak  staff   128B 12 17 00:04 UserSettings
drwxr-xr-x   3 mattak  staff    96B 12 16 23:47 obj

-h は human numeric sort option. KMGTPEZY の単位 (SI)が使えるっぽい
単位の比較が優先で、2048Kと1Mだと1Mの方が大きいと判定される点は注意.

$ ls -lha | sort -h -k 5
total 552
drwxr-xr-x   3 mattak  staff    96B 12 16 23:24 .github
drwxr-xr-x   3 mattak  staff    96B 12 16 23:47 .idea
drwxr-xr-x   3 mattak  staff    96B 12 16 23:47 obj
drwxr-xr-x   4 mattak  staff   128B 12 16 23:00 Packages
drwxr-xr-x   4 mattak  staff   128B 12 17 00:04 UserSettings
drwxr-xr-x  13 mattak  staff   416B 12 20 22:24 .git
drwxr-xr-x  16 mattak  staff   512B 12 20 00:21 Logs
drwxr-xr-x  18 mattak  staff   576B 12 20 22:10 ..
drwxr-xr-x  20 mattak  staff   640B 12 20 00:30 Assets
drwxr-xr-x  21 mattak  staff   672B 12 17 23:01 ProjectSettings
drwxr-xr-x  22 mattak  staff   704B 12 20 01:53 .
drwxr-xr-x  34 mattak  staff   1.1K 12 20 01:53 Library
-rw-r--r--   1 mattak  staff   1.3K 12 16 23:18 .gitignore
-rw-r--r--   1 mattak  staff   2.7K 12 20 00:30 SampleGameCI.sln
-rw-r--r--   1 mattak  staff   3.0K 12 17 00:17 Tests.csproj
-rw-r--r--   1 mattak  staff   3.1K 12 20 00:22 PluginAndroid.csproj
-rw-r--r--   1 mattak  staff   3.1K 12 20 00:30 PluginIOS.csproj
-rw-r--r--   1 mattak  staff    48K 12 20 00:48 EditTset.csproj
-rw-r--r--   1 mattak  staff    49K 12 20 00:48 Assembly-CSharp.csproj
-rw-r--r--   1 mattak  staff    49K 12 20 00:48 PluginBase.csproj
-rw-r--r--   1 mattak  staff    49K 12 20 00:48 PluginNative.csproj
-rw-r--r--   1 mattak  staff    50K 12 20 00:48 PluginEditor.csproj

version順でsort

-V でsemantic versionを考慮したsortができるようだ.
これも地味に便利で使い所ありそう. 特にgit tagとかで表示する際に

$ cat /tmp/version.txt
v0.100.0
v0.1.0
v0.10.0
$ cat /tmp/version.txt | sort -V
v0.1.0
v0.10.0
v0.100.0

random順にする

-R で順番をランダムにすることができるっぽい.
sort使うときは大体ならべたいときだったのでこれは発想になかった.
データ処理する時とかに地味に便利そうだ.

$ cat /tmp/version.txt | sort -R
v0.1.0
v0.100.0
v0.10.0
$ cat /tmp/version.txt | sort -R
v0.100.0
v0.1.0
v0.10.0
$ cat /tmp/version.txt | sort -R
v0.100.0
v0.1.0
v0.10.0
$ cat /tmp/version.txt | sort -R
v0.10.0
v0.100.0
v0.1.0

Discussion