各行の最初の文字を特殊文字として削除し、ファイルをセミコロンで区切られたファイルに変換したいと思います。

各行の最初の文字を特殊文字として削除し、ファイルをセミコロンで区切られたファイルに変換したいと思います。

ソースファイルの各行の先頭には特殊文字があります。ファイルは二重スペースで区切られます。

サンプルデータファイル:

âNAME  ABC
âAGE  21
âADDRESS  XYZ street ABC city
âCONTACT  13244235
âDOJ  20181212

â各行の最初の特殊文字を削除し、ファイルを;(セミコロン)区切りファイルに変換したいと思います。

私が書いた後、コードはUATではうまくいきますが、PRODではうまくいきません。

awk '{ print substr($0,1) }' FILE1.txt | sed 's/ /;/' > FILE2.txt

UAT出力(予想される予測出力):

NAME;ABC
AGE;21
ADDRESS;XYZ street ABC city
CONTACT;13244235
DOJ;20181212

製品出力:

âNAME;ABC
âAGE;21
âADDRESS;XYZ street ABC city
âCONTACT;13244235
âDOJ;20181212

同じコードはUATでうまく機能します。つまり、最初の文字を削除してファイルをセミコロンで区切られたファイルに;変換しますが、PRODは最初の特殊文字を削除せずにファイルをセミコロンで区切られたファイルに変換します。

出力locale

locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

誰でもこの問題を解決するのに役立ちますか?

ベストアンサー1

あなたの問題が文字エンコーディングに関連している可能性があると思います。FILE1.txt両方の環境で表示してみてください。

hexdump -C FILE1.txt

E-asciiまたはUTF-8でエンコードできます(参照:https://en.wikipedia.org/wiki/%C3%82#Character_mappings)

問題を解決するには、両方のエンコーディングを一致させてください。

        â in UTF-8                     â in other encoding
        |                              |
        v                              v
sed 's/\xc3\xa2//' FILE1.txt | sed 's/\xE2//' > FILE2.txt

別の回避策は、ファイルを処理する前に既知のエンコーディングに変換することです。

PRODエンコーディングをテストしないと危険です。

おすすめ記事