2017-06-20 8 views
1

私は海洋計測器からオフロードされたファイルのリストを持っています。なんらかの理由で、ASCII文字が必要な場所に非ASCII文字が挿入されることがあります。私はgrave-E(È)を見つけました。そこでは、経度記録の西半球を表すWが必要です。ここでBash/Linux .txtファイル内の非ASCII文字を検索し、ASCII文字で置き換えます。

は、データは次のようになります。

CUMSECS Date UTC Time UTC Date Local Time local Z (m) Target Z Z Bot Temp PAR Salin Ang VelX Ang VelY Ang VelZ Pump + Pump - Gctr Fix secs Date UTC Time UTC Date Local Time Local Lat LatD Latm  Lon LonD Lonm  DOP Temp PAR Salin Batt V  CMD secs Date Local Time Local No. Cmds 
526068034 09/01/16 18:00:34 09/01/16 11:00:34  3.75 2.69  
3.75  0.29 0.000000 0.00 -12 -70 -50 0 5 10 
526068039 09/01/16 18:00:39 09/01/16 11:00:39  3.75 2.69  
3.75  0.29 0.000000 0.00 -12 -70 -50 0 5 10 
526068044 09/01/16 18:00:44 09/01/16 11:00:44  3.74 2.69  
3.75  0.29 0.000000 0.00 -12 -70 -50 0 5 10 
526068049 09/01/16 18:00:49 09/01/16 11:00:49  3.73 2.69  
3.75  0.29 0.000000 0.00 -30732 13588 31909 60399 7538 -82 
543622771 03/23/17 22:19:31 03/23/17 15:19:31 38.31877 38 
19.1262 N 123.07136 123 4.2812 È 23.6 115.06  0.0000 96.00 
121.718 
547764151 05/10/17 20:42:31 05/10/17 13:42:31  0.03 16.00 
127.00 13.68 1074.904320 33.56 -4908 -3976 261 1 0 0 
547764152 05/10/17 20:42:32 05/10/17 13:42:32  0.00 16.00 
127.00 13.68 1074.904320 33.56 -4908 -3976 261 1 0 0 

私は一連のファイルをループしたいと思い、次のバッシュライン pcregrep -n '[^\x00-\x7F]' 170510_ocean_Copepod.txt

を使用して非ASCII文字を見つけることができ、これらを見つけますそれらをRに読み込んでまとめて処理できるように、 'W'で置き換えてください。あるいは、これらのファイルを読み込もうとしたときにRが返すエラー(「マルチバイト文字列の場所...」)の回避策は、私の目的にも同様に有効です。どんな助けでも大歓迎です。

+2

あなたがこれまでに試してみましたか? –

+0

'pcregrep -n '[^ \ x00- \ x7F]' 170510_ocean_Copepod.txt | sedの/ [^ \ x00- \ x7F]/W/g ''しかし、それは不正なバイト列のsed呼び出しでエラーを返します – SeaSpider

+0

' read.table'の 'fileEncoding'引数を変更しようとしましたか? – Scarabee

答えて

1

私はこの問題は、UTF-8でÈ\xc3\x88sedからなるマルチバイト文字は、何らかの理由でそれに対処することができないようであるということだと思います。 @Jackが示唆したように、trは(pcregrepれていないWindows用bashでテストした)仕事のためのより良いツールかもしれません:それはWに別々に両方のバイトを変換しないこと

[email protected]:~$ grep -P '[^\x00-\x7f]' | tr 'È' 'W' 
19.1262 N 123.07136 123 4.2812 WW 23.6 115.06  0.0000 96.00 

注意してください。

iconvを使用してファイル全体を変換する方法もあります。 iso-8859-15(latin-9)は、シングルバイト文字エンコーディングの一例です。 iconvを使用してファイルを変換するコマンドは次のようになります

iconv -f utf-8 -t iso-8859-15 -o <converted-file> <input-file> 
+1

別のオプションは 'iconv'を使って' r 'で読み込む前にファイルのエンコーディングを変換することです。 –

+0

trを使ったシェルアプローチのように見えますが、エンコーディングについても興味があります。私が変換できるエンコーディングがマルチバイト文字を含んでいないことを知っていますか?その後、Rに読み込むことができますか?あなたの有益な提案をありがとう。 – SeaSpider

+0

trのアプローチも同様にハングアップしているようです。私はエラーが発生します: 'tr:不正なバイト列' 'cat | tr '' '' ''または 'pcregrep -n' [^ \ x00- \ x7F] '170510_ocean_Copepod.txt | tr 'È' 'W' '。 catアプローチを使用すると、エラーを返す前にÈがある行に出力されます。 – SeaSpider

0

あなたはWÈを置き換えるためにsedを使用することができます。

sed 's/È/W/g' 170510_ocean_Copepod.txt 
関連する問題