📑
sort commandのoptionが便利
背景
普段使ってる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