如何应用Unix';s/Sed&x27;s/Perl';s是否仅将(tr)音译为特定列?

如何应用Unix';s/Sed&x27;s/Perl';s是否仅将(tr)音译为特定列?,perl,bash,sed,Perl,Bash,Sed,我有这样的程序输出(tab delim): 我只想在第一列上做:用A替换0,用C替换1,用G替换2,用T替换3。 是否有一种方法可以将直接从“mycode”导出的输出进行音译。 因此: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 238671 ... AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACT 937.306 应该可以使用sed来完成,将其放在一个文件中(您可以使用命令行to,使用-e,只是不要忘记那些分号,或者对

我有这样的程序输出(tab delim):

我只想在第一列上做:用A替换0,用C替换1,用G替换2,用T替换3。 是否有一种方法可以将直接从“mycode”导出的输出进行音译。 因此:

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA        238671
...
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACT        937.306

应该可以使用sed来完成,将其放在一个文件中(您可以使用命令行to,使用-e,只是不要忘记那些分号,或者对每一行使用单独的-e)。(编辑:请记住,由于您的数据是以制表符分隔的,因此在第一个s/,它实际上应该是制表符,而不是空格,请确保编辑器不会将其转换为空格)

和使用

./mycode somefile | sed -f sedfile
chmod 755 sedfile
和do

./mycode somefile | sedfile
执行的步骤包括:

  • 将缓冲区复制到保留空间(替换前一行中保留的内容,如果有)
  • 删除尾随内容(从第一个空格到行尾)
  • 音译
  • 从保留空间追加内容
  • 删除换行符(从追加步骤)及其后面的所有数字(直到空格)
  • 至少在你的数据上为我工作过

    编辑:
    啊,你想要一艘客轮

    GNU sed

    sed -e "h;s/ .*$//;y/0123/ACGT/;G;s/\n[0-3]*//"
    
    或老式sed(无分号)

    使用Perl:

    C:\> ./mycode file | perl -lpe "($x,$y)=split; $x=~tr/0123/ACGT/; $_=qq{$x\t$y}" AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 238671 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACC 1548.81 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACG 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACT 937.306 使用这些:

    perl -lawnF'\t' -e '$,="\t"; $F[0] =~ y/0123/ACGT/; print @F' perl-lawnF'\t'-e'$,=“\t”$F[0]=~y/0123/ACGT/;打印@F' @萨拉提

    \此问题的AWK解决方案

    awk '{gsub("0","A",$1);gsub("1","C",$1);gsub("2","G",$1);gsub("3","T",$1); print $1"\t"$2}' temp.txt
    

    或者使用-F:perl-lawnF'/\t/'-e'$,=“\t”$F[0]=~y/0123/ACGT/;打印@F'@ysth我总是忘了
    -F
    。有人能建议我们如何使用awk吗?我想这会很有用。 C:\> ./mycode file | perl -lpe "($x,$y)=split; $x=~tr/0123/ACGT/; $_=qq{$x\t$y}" AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 238671 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAG 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAT 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACC 1548.81 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACG 0 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACT 937.306 $ ./mycode file | perl -lpe '($x,$y)=split; $x=~tr/0123/ACGT/; $_="$x\t$y"' -a autosplit mode with -n or -p (splits $_ into @F) ... -F/pattern/ split() pattern for -a switch (//'s are optional) perl -lawnF'\t' -e '$,="\t"; $F[0] =~ y/0123/ACGT/; print @F'
    awk '{gsub("0","A",$1);gsub("1","C",$1);gsub("2","G",$1);gsub("3","T",$1); print $1"\t"$2}' temp.txt