0

私はこれを機能させることができません。Xcsv ファイルの最初のフィールドにある 2 つの文字の出現箇所すべてを、出現箇所と追加された空白文字に置き換えて、空白を削除したいと考えています。たとえば、新しいファイルではSAand にSA マップする必要があります。SAX以下は私が試したものですsed(ヘルプから以前の質問まで)

system( paste("sed ","'" ,'  s/^GG/GGX/g; s/^GG\\s/GGX/g;  s/^GP/GPX/g;
 s/^GP\\s/GPX/g; s/^FG/FGX/g; s/^FG\\s/FGX/g; s/^SA/SAX/g; s/^SA\\s/SAX/g; 
 s/^TP/TPX/g; s/^TP\\s/TPX/g   ',"'",' ./data/concat_csv.2 >     
./data/concatenated_csv.2 ',sep=''))

関数を使用してみましたsQuote()が、これはまだ役に立ちません。特定の行のセパレーターが多すぎて十分でないことに基づいて、一部のフィールド内にエラーがあるため、ファイルは read.csv によって処理される際に問題があります。

ファイルを読み込んで編集することはできますが、ストリーミング プロセスとしてそれを行う方法がわかりません。

system()呼び出しを使用してファイルの最初のフィールドを編集したいだけです。ファイルは約30GBです。

4

1 に答える 1

0

次のようなファイルで次のことを試してください。

echo "fi,second,third" | awk '{len = split($0,array,","); str = ""; for (i = 1; i <= len; ++i) if (i == 1) { m = split(array[i],array2,""); if (m == 2) {str = array[i]"X";} else {str = array[i]};} else str = str","array[i]; print str;}' 

したがって、paste() 呼び出しへの入力として次を使用して、R から呼び出します。

cat fileNameToBeRead | awk '{len = split($0,array,","); str = ""; for (i = 1; i <= len; ++i) if (i == 1) { m = split(array[i],array2,""); if (m == 2) {str = array[i]"X";} else {str = array[i]};} else str = str","array[i]; print str;}' > newFile

ただし、このコードは空白の要件を処理しません。見ている機能の種類を示す例を提供できますか

于 2013-01-24T08:17:44.107 に答える