2013-01-24 16 views
0

我無法得到這個工作。我想用一個csv文件的第一個字段替換所有的兩個字符發生,並且附加了一個X,並且刪除了空格。例如,SASA應映射到新文件中的SAX。下面是我試圖與sed(從幫助通過前面一個問題)如何使用轉義字符構建一個system()函數調用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。

+0

請定義「太大」和「太複雜」。 R有處理大文件的軟件包,並且'read.table'或'scan'有大量的過濾器。 –

+0

謝謝,編輯了這個問題。 – Yoda

回答

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;}' 

所以你會使用以下內容作爲輸入到粘貼調用它從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 

此代碼不會盡管處理你的空白需求。您能否提供示例來演示您正在查看的功能類型

相關問題