如何使用转义字符构建一个system()函数调用sed?

时间:2013-01-24 07:38:08

标签: r sed awk read.table

我无法让这个工作。我想替换csv文件的第一个字段中的所有两个字符出现,并附加X,并删除空格。例如,SASA应映射到新文件中的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。

1 个答案:

答案 0 :(得分: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

此代码不会处理您的空白要求。你能提供一些例子来展示你正在寻找的那种功能