スポンサーリンク
SJISファイルを読み込むと「警告: 無効なマルチバイト・・・」が表示
※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-
参考:awk入門-使い方まとめ一覧-
※MACターミナル(BSD系)での動作確認です。
例えば、下記のin.txtがあったとします。
(SJISです)
$ cat in.txt 漢字漢字 1 ひらがな 2 カタカナ 3
下記がサンプルコードになります。
参考:awkでsubstr()を使って文字列を切り出す方法
$ cat sample.awk #!/bin/sh cat in.txt | gawk ' { num = substr( $1, 2, 2) print num , $2 } '
下記が実行結果になります。
うまく処理できていないですね。
$ ./sample.awk gawk: コマンドライン:3: (FILENAME=- FNR=1) 警告: 無効なマルチバイトデータが検出されました。データとロケールが一致していないようです。 ?? 1 Ђ炪 2 J? 3
スポンサーリンク
入力ファイルをUTF-8にする
入力ファイルをUTF-8に変換します。
参考:nkfで、UTF-8 改行コードLFに変更する(上書き)
nkfが便利ですね。
--overwriteで上書きです。
$ nkf -w --overwrite in.txt
下記が実行結果になります。
うまく処理できたようです。
$ ./sample.awk 字漢 1 らが 2 タカ 3
参考:SJISの表示でMACターミナルが文字化けした時の対策
・MACターミナルの表示にも影響が出ますね。
今の時代、UTF-8にしておくのが無難だと思います。
※読者の方からご指摘頂きました。ありがとうございました。
読者の方から、「警告が出るのは、ターミナルがUTF-8になっているから」とのご指摘を頂きました。
これはご指摘の通りです。ターミナルのエンコーディングをShift JISに変更すると、警告は消えます。
具体的な方法としては、下記の通りです。
「ターミナル」-> 「プロファイル」->「環境設定」-> 詳細 -> 言語環境のテキストエンコーディング
ここで、Shift JISを選択
ただ、MACターミナルのデフォルトはUTF-8ですし、UTF-8で扱っていく方が問題に遭遇する場面が減ると考えています。なので、今回は、UTF-8に変換して統一する方法を記載した次第です。
お問い合わせ頂きまして、ありがとうございました。
この場を借りてお礼申し上げます。
スポンサーリンク