質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

1回答

4256閲覧

nkfで文字/改行コード変換すると日本語が消える

inu_inu

総合スコア19

bash

bash(Bourne-again-Shell)は sh(Bourne Shell)のインプリメンテーションに様々な機能が追加されたシェルです。LinuxやMac OS XではBashはデフォルトで導入されています。

Tera Term

Tera Termは、TeraTerm Projectが開発する国産のWindows向けターミナルソフト。telnetプロトコルでのリモートホストへの接続やCOMポートのシリアル接続が可能で、マクロが利用できます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2019/01/22 02:20

編集2019/01/22 02:27

実現したいこと

英字・数字・日本語など混在するCSV(TSV)データの文字・改行コードを変換したいと考えています。
下記シェルスクリプトを実行すると、変換前は日本語も含めて表示されていましたが、変換後は日本語部分だけ消えてしまいます。
元データを十分残したままコード変換する方法、またオプションなど誤っている部分があればご教授いただきたいです。

変換前文字コード:SJIS、UTF-8
変換後文字コード:UTF-8 (SJISファイルも存在するため、対象ファイルすべてを変換しようとしています)

bash

1#!/bin/bash 2 3# バッチ実行 4echo "### START Convert" 5 6# PostgreSQL接続 7echo "### DB Connect" 8psql postgresql://xxx.xxx.xxx.xxx:5432/xxx_xxx -U root << EOF 9 10\COPY table_1 TO '/tmp/test.tsv' WITH CSV HEADER NULL AS 'null' DELIMITER E'\t' 11\COPY table_2 TO '/tmp/test2.tsv' WITH CSV HEADER NULL AS 'null' DELIMITER E'\t' 12 13EOF 14 15# 改行コード変換(CRLF) 16echo "### code Convert" 17for file in /パス/*.tsv 18do 19 nkf -lw -w8 ${file} > ${file}.tsv 20done 21 22# バッチ終了 23echo "END Convert" 24 25exit 0 26

下記に参考としてCSV出力例を記載します。

SAMPLE

1実行前CSV 2header1 header2 3001 001テスト.1 4 5実行後CSV 6header1 header2 7001 001.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

結果には関係しないと思いますが、-lwは、おそらく改行コードをCRLFにする-Lwの間違いでは?

あと、-w8だとBOM付きになりますが、それでいいのでしょうか?

下記に参考としてCSV出力例をきさいして

は、どうやって出力しましたか?

投稿2019/01/22 02:32

編集2019/01/22 02:33
otn

総合スコア84538

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inu_inu

2019/01/22 02:51

>結果には関係しないと思いますが、-lwは、おそらく改行コードをCRLFにする-Lwの間違いでは? ⇒ご指摘の通りです、修正いたします。 >-w8だとBOM付きになりますが、それでいいのでしょうか? ⇒UTF-8だとわかるほうがいい!と思い、指定しましたが、BOM有/無によって判定処理など影響があるのですね。今一度確認など行ってみます。 >どうやって出力しましたか? ⇒「nkf -lw -w8 ファイル1 > ファイル2.tsv」を直接ターミナル上で実行しました。「sh スクリプト.sh」にて実行した場合も同様な結果となりました。(CSVの内容は記載用に変えていますが大体同じ内容です)
otn

2019/01/22 03:07

> 「nkf -lw -w8 ファイル1 > ファイル2.tsv」を直接ターミナル上で実行しました。 いや、その後の事を聞いています。「どうやって表示しましたか?」と聞いた方が良かったか。
inu_inu

2019/01/22 03:39

あ、失礼しました…出力したTSVはサクラエディタにて表示しました。(質問の意に沿っていなければ申し訳ございません) また私事になりますが、ネット環境にトラブルが発生してしまい、返信・コード修正/実行が満足にできない状況です。以降の返答が遅れてしまう可能性があります、ご容赦ください。
otn

2019/01/22 03:53

サクラエディタの問題かも知れません。 そのまま cat コマンドで表示するとどうでしょうか?あるいはWindows標準のメモ帳とか。
inu_inu

2019/01/22 04:35

ネットトラブルが解消したため確認したところ、最初のコメントで頂いた「-lwは、おそらく改行コードをCRLFにする-Lwの間違いでは?」を修正すると、日本語が消えることなく表示されました! オプションが正しく渡されないせいで、影響があったようです。なぜ日本語だけ消えたのかは不明ですが…。 また今回のことで、そもそも文字コードについて認識誤りがあったため勉強しようと思います。 ありがとうございました!
otn

2019/01/22 04:53

マニュアルには、 > -l 0x80-0xfe のコードを ISO-8859-1 (Latin-1) として扱う。 JIS コードア > ウトプットとの組合せみのみ有効。 -s, -e, -x とは両立しない。 と書いてあったので、UTF-8出力の場合は無視されるのかと思っていました。 マニュアルが間違ってますね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問