より良いエンジニアを目指して

1日1つ。良くなる!上手くなる!

UNIX系CLIコマンドの演習

会社の勉強会で、UNIXCLIコマンドを紹介してもらったのですが、そこまで出来るの?と驚きでした。

ExcelでやるようなことがUNIX系コマンドが出来るのです。

勉強会に参加するだけでなく、それを活かせるかも重要です。

これを受けて、私は以下のような問題を出題してみました。

読み仮名データの促音・拗音を小書きで表記するもの - zip圧縮形式 日本郵便より全国の郵便番号が取得できます。一番郵便番号をもつ県はどこかCLIで調べ> データの説明は ( 郵便番号データの説明 - 日本郵便 )

ワンライナー芸人が作ったコマンドとか見ると、なんでこんなの出来るんだと思ってしまいます。

やってみて、いきなり1行で書こうとしないのがコツかなとわかってきました。

まず、データはSJISなので、UTF-8にして何行かデータを確認してみます。

f:id:rimever:20201010142541p:plain
iconv -f sjis -t utf8 KEN_ALL.CSV | head -n 5

県の列だけ抜き出してみます。

f:id:rimever:20201010142737p:plain
iconv -f sjis -t utf8 KEN_ALL.CSV | cut -f 7 -d , | head

uniq -cで重複する数を取得できます。

f:id:rimever:20201010142954p:plain
iconv -f sjis -t utf8 KEN_ALL.CSV | cut -f 7 -d , | uniq -c | head -n 10

あとは、sort で数字の降順でソートするために-nrオプションを指定します。

f:id:rimever:20201010143127p:plain
iconv -f sjis -t utf8 KEN_ALL.CSV | cut -f 7 -d , | uniq -c | sort -nr | head -n 10

おまけ

sort関数は -k に区切り文字、 -f で列番号を指定すれば、指定の列でソートが可能です。

f:id:rimever:20201010143657p:plain
iconv -f sjis -t utf8 KEN_ALL.CSV | sort -t , -k 6 -r | head -n 10