ShellScript
nkf

2文字濁音(NFD)で発狂せずに1文字濁音(NFC)へ変換しCSVで出力する方法

Windowsユーザーから送られてきたファイルなどをmacで確認すると、濁音が2文字濁音として表示されて…困った経験はないですか?

僕はあります!笑

指定したフォルダのサブフォルダとファイル名を取得し二文字濁音を一文字濁音へ変換してcsvで出力する方法を紹介します!

まずはnkfをインストールしよう!

ターミナルで以下のコマンドを入力します。

$ brew install nkf

homebrewのインストールがまだな人は以下よりインストールしてください!
Homebrew

ここからはShellScript

toNfcCsv.sh
#!/bin/bash

make_csv()
{
dir="$1"

find ${dir} | nkf -wLu --ic=UTF8-MAC | nkf -s > ${dir}.csv
}

for i in "$@"
do
  make_csv "$i"
done

解説

make_csv()
{
dir="$1"

find ${dir} | nkf -wLu --ic=UTF8-MAC | nkf -s > ${dir}.csv
}

findコマンド

findコマンドで指定したフォルダのサブフォルダ、ファイルを取得し|で標準入力としてnkf -wLu --ic=UTF8-MACへ渡します。

NFD→NFCへの変換

nkf -wLu --ic=UTF8-MACでは、--ic=UTF8-MACで入力文字コードをNFD(UTF8-MAC)として受け取り、-wでUTF8コード(NFC)として出力します。-Lu改行コードを「LF」として出力するオプションです。 
UTF8-MACについては以下を参考にしました!

UTF-8-MAC とは、Mac OS X に付属する iconv にて利用できる文字エンコードの一つで、 Normalization Form D (NFD) で符号化した UTF-8 のことを指します。 一般に UTF-8 とだけいった場合には、Normalization Form C (NFC) でエンコードされたものを意味します。
引用:UTF-8-MAC

つまり、-wオプションはNormalization Form C (NFC)として出力することになります
ここでは、UTF-8(UTF-8-MAC(NFD))をUTF-8(NFC)へ変換したことになります。

csvファイルの作成

nkf -s > ${dir}.csv では、Shift JISで出力した値を新たにcsvファイルで書き出すようにしています。Shift JISで書き出す意味あるの? と思うそこのあたな! nkf -wLu --ic=UTF8-MACの標準出力をcsvへ書き出してみて下さい……。:eyes:

一応解説

for i in "$@"
do
  make_csv "$i"
done

複数フォルダを指定した場合にも対応できるようにしています。
↓こんな感じ!

$ ./toNfcCsv.sh フォルダ1 フォルダ2

最後に

単純にテキストファイルとして出力したい場合は以下でokです:relaxed:

nkf -wLu --ic=UTF8-MAC > ${dir}.txt

Githubでコードアップしたので良かったら使ってみてください!
https://github.com/masanorifunaki/bash-toNfcCsv

参考

UTF-8-MAC
IT専科 UNIX/Linuxコマンド nkf