
2つの異なるエンコーディングを使用する複数のベンダーのcsvファイルを含むディレクトリがあります。
- ASCIIテキスト/UTF-8
- UCS2/UTF-16リトルエンディアン
私は従来の構文を使用してこれらのデータファイルにgrep、awk、sed、およびその他のユーティリティを使用したいと思います。
これらのファイルをUTF-16からUTF-8に記録しても、有用なデータは失われません。すべてのcsvファイルにはASCIIデータしか含まれていないため、一部のベンダーがリトルエンディアンUTF-16にファイルを提供する理由を理解できません。
出力を解析するために短いスクリプトを書いていますが、file
非常に脆弱であると思います。
複数のエンコーディングでファイルを管理するより良い方法が必要です。この種の問題を解決するのに役立つプログラムやユーティリティはありますか?
私はDebianの安定版を使用しています。
for f in ./*.csv
do
if [[ $(file "$f") == *"UTF-16"* ]]
then
iconv -f UTF-16 -t UTF-8 "$f" > "$f"-new
mv "$f"-new "$f"
fi
done
答え1
スクリプトを次のように改善します。
set -o noclobber
for f in ./*.csv
do
if [ "$(file -b --mime-encoding "$f")" = utf-16le ]; then
iconv -f UTF-16 -t UTF-8 "$f" > "$f"-new &&
mv "$f"-new "$f"
fi
done