R 对大型文本文件执行编辑序列

R 对大型文本文件执行编辑序列,r,perl,sed,awk,R,Perl,Sed,Awk,我希望对一个几乎完全由单个字母组成的大文本文件进行一系列编辑,并用空格分隔。该文件大约有300行乘400000列,大约有250MB 我的目标是使用一系列步骤转换此表,以便最终使用另一种语言(可能是R)进行处理。我在处理大数据文件方面没有太多经验,但有人向我建议PERL是最好的方法。如果有更好的方法,请告诉我:) 因此,我希望编写一个PERL脚本,它可以执行以下操作: 按以下步骤打开文件、编辑或写入新文件: 移除第2-6列 合并/连接列对,从列2开始(因此,合并列2-3、4-5等) 根据在每行上运

我希望对一个几乎完全由单个字母组成的大文本文件进行一系列编辑,并用空格分隔。该文件大约有300行乘400000列,大约有250MB

我的目标是使用一系列步骤转换此表,以便最终使用另一种语言(可能是R)进行处理。我在处理大数据文件方面没有太多经验,但有人向我建议PERL是最好的方法。如果有更好的方法,请告诉我:)

因此,我希望编写一个PERL脚本,它可以执行以下操作:

  • 按以下步骤打开文件、编辑或写入新文件:
  • 移除第2-6列
  • 合并/连接列对,从列2开始(因此,合并列2-3、4-5等)
  • 根据在每行上运行的顺序条件算法替换每个字符对:

    [example PSEUDOCODE: if character 1 of cell = character 2 of cell=a,  cell=1
    else if character 1 of cell = character 2 of cell=b, cell=2
    etc.] such that except for the first column, the table is a numerical matrix
    
  • 每N列删除一次,或保留每N列并删除所有其他列

  • 我刚刚开始学习PERL,所以我想知道这些操作在PERL中是否可行,PERL是否是执行这些操作的最佳方式,以及在读取/写入文件的上下文中是否有关于这些操作的语法建议。

    我将开始:

    use strict;
    use warnings;
    my @transformed;
    while (<>) {
      chomp;
      my @cols = split(/\s/);  # split on whitespace
      splice(@cols, 1,6);      # remove columns
      push @transformed, $cols[0];
      for (my $i = 1; $i < @cols; $i += 2) {
        push @transformed, "$cols[$i]$cols[$i+1]";
      }
    
      # other transforms as required
    
    
      print join(' ', @transformed), "\n";
    }
    
    使用严格;
    使用警告;
    我的灵魂改变了;
    而(){
    咀嚼;
    my@cols=split(/\s/);#在空格上拆分
    拼接(@cols,1,6)#移除柱
    推送@transformed,$cols[0];
    对于(我的$i=1;$i<@cols;$i+=2){
    推送@transformed,“$cols[$i]$cols[$i+1]”;
    }
    #根据需要进行其他转换
    打印联接(“”,@transformed),“\n”;
    }
    

    这应该会让您上路。

    您需要发布一些示例输入和预期输出,或者我们只是猜测您想要什么,但这可能是一个开始:

    awk '{
       printf "%s ", $1
       for (i=7;i<=NF;i+=2) {
          printf "%s%s ", $i, $(i+1)
       }
       print ""
    }' file
    
    awk'{
    printf“%s”,1美元
    
    对于(i=7;iNote:ia),循环增量为$i+=1。它应该是$i+=2,所以我编辑了答案。