Intro
MacのExcelでcsv形式で保存したファイルに対してawkやjoinで良きに図ろうとするとぐちゃぐちゃな表示になった経験はありませんか?
ニッチすぎて需要があるかものすごく疑問ですが、MacのOffice 365の2019/03/05時点最新版Excelでシートをcsv(UTF-8)形式で保存した場合に、そのファイルに対してawk,joinコマンドを使いたいあなた(?)に向けて留意点を書きます。
留意点
MacのExcelでcsvを保存すると、
- 文字コードはUTF-8ですが、BOM(バイトオーダーマーク)が付きます
- 改行コードがLFではなく、CRLFになってCRが余計に付きます
改行コードCRLFがMacだとキッツイ。
Windowsじゃないのです。
検証
Excelで
1 2
2 3
3 4
4 5
5 5
をcsv形式でsheet1.csvという名前で保存。
$ cat sheet1.csv
1,2
2,3
3,4
4,5
5,5
一見何の変哲も無い。
$ awk '{print $1,$2}' sheet1.csv
1 2
2 3
3 4
4 5
5 5
これは大丈夫。
$ awk '{print $2,$1}' sheet1.csv
1
2
3
4
5 5
これがNGです。
まず先に怪しそうなCRLFをLFに変換して再度awk
$ nkf --overwrite -Lu sheet1.csv
$ awk '{print $2,$1}' sheet1.csv
2 1
3 2
4 3
5 4
5 5
OKです。
CRLFが余計であって、BOMは関係なさそうですね。
対処
BOMも気になる方は、BOMなしUTF-8かつ改行コードをLFにして上書き保存しちゃいましょうか。
$ nkf -w -Lu --overwrite [csvファイル名]
この記事にたどり着いた人でnkfコマンドを知らない人はいない気がするので、この解説とインストールは省きます。