次のように、特殊文字を含むソースから大規模なCSVデータストリームを処理しています。
`÷ Þ Ÿ ³ Ù ÷`
以下は、次の文字を含むデータセットのサンプル行です。
'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'
以下は、別のデータセットから取得した別の例です。
WCP16,2013-06-04 20:06:24,2013-06-04,CPU,PrimeNumberGenerationTest,PASS,USA,HF0SXV1,,,N,9999
WCP06,2013-06-04 20:06:24,2013-06-04,CPU,RegisterTest,PASS,USA,HF0SXV1,,,N,9999
WCD42,2013-06-04 20:06:24,2013-06-04,DVDMINUSRW,MainICTest,PASS,USA,HF0SXV1,,,N,9999
WCP09,2013-06-05 01:52:53,2013-06-05,CPU,SSE3Test,PASS,,?÷ÞQ»,,,N,9999
WCP10,2013-06-05 01:52:53,2013-06-05,CPU,SSE4_1Test,PASS,,?÷ÞQ»,,,N,9999
どんなキャラクターが出るのか分からないと対処できますよ情報学ファイルを読むとき。
しかし、私の場合、特定の日付にどの種類のデータを取得するのかわからないため、操作は失敗します。したがって、データからすべての特殊文字を削除する方法が必要です。
ベストアンサー1
「特殊文字」が正確に何を意味するのか分かりません。したがって、特殊文字を削除したいとします。ASCIIコード数値。あなたに役立ついくつかのツールがあります。最初に浮かぶいくつかは次のとおりです。
iconv
(国際転換)tr
(翻訳する)sed
(ストリームエディタ)
iconv
(国際転換)
以下は、以下を使用するソリューションです。賞:
iconv -c -f utf-8 -t ascii input_file.csv
バナー-f
(~から)は入力形式、-t
フラグ(到着)は出力形式を指定し、この-c
フラグはターゲットiconv
に変換できない文字が削除されることを示します。これにより、結果が標準出力(コンソールなど)に書き込まれます。結果を新しいファイルに書き込むには:
iconv -c -f utf-8 -t ascii input_file.csv -o output_file.csv
その後、必要に応じて元のファイルを新しいファイルに置き換えることができます。
mv -i output_file.csv input_file.csv
iconv
最初のサンプル文字列を処理する方法は次のとおりです。
$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | iconv -c -f utf8 -t ascii
'W' , '', ''
tr
(翻訳する)
以下は、以下を使用するソリューションです。tr(翻訳)注文する:
cat input_file.csv | tr -cd '\000-\177'
この\000-\177
モードでは、指定した数値範囲 0~127 を使用します。8進数シンボル。 ASCII 文字の値の範囲です。このフラグは、この範囲の値が補数で一致する(つまり、ASCII以外の文字が一致する)ことを-c
示し、このフラグは翻訳ではなく削除が実行されることを示します。tr
-d
tr
結果をファイルに書き込むには、次を使用できます。出力リダイレクト:
cat input_file.csv | tr -cd '\000-\177' > output_file.csv
tr
最初のサンプル文字列を処理する方法は次のとおりです。
$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | tr -cd '\000-\177'
'W' , '', ''
sed
(ストリームエディタ)
以下は、以下を使用するソリューションです。sed:
sed 's/[\d128-\d255]//g' input_file.csv
プレフィックスは実行する置換をs
表し、サフィックスはグローバル一致パターン(デフォルトでは最初の一致のみ一致)を表し、パターンは128から255の範囲の10進値を持つ文字(非ASCII文字など)の一致を表します。します。 )、2番目と3番目のスラッシュの間の空の文字列は、一致するパターンを空の文字列に置き換え(つまり削除)することを意味します。sed
g
sed
[\d128-\d255]
sed
sed
他の多くのプログラムとは異なり、sed
(手動で別のファイルに書き込んでから元のファイルを置き換えるのではなく)、ファイルを所定の場所に更新するオプションがあります。
sed -i 's/[\d128-\d255]//g' input_file.csv
sed
最初のサンプル文字列を処理する方法は次のとおりです。
$ echo "'÷ÞW' , 'ŸŸŸŸŸŸŸ', '³ŸŸÙ÷'" | sed 's/[\d128-\d255]//g'
'W' , '', ''