0

我不能让它工作。我想用出现和附加的空格替换 csv 文件的第一个字段中出现的所有两个字符X,并删除空格。例如SA并且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;}' 

因此您可以使用以下内容从 R 调用它作为 paste() 调用的输入

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 回答