将字符串按每个字符拆分

4
我希望能将字符串中的每个字符拆分并输出为逗号或制表符分隔的字符:
由于我的行数非常多,所以需要使用file_infile_out

输入

TTTGGC
TTTG
TGCAATGG
....
....

输出

T,T,T,G,G,C
T,T,T,G
T,G,C,A,A,T,G,G

我曾使用过这个,但它会垂直打印每个字符:
  /usr/bin/perl
   use strict;
   use warnings;

    my $data = 'Becky Alcorn';

   my @values = split(undef,$data);

  foreach my $val (@values) {
   print "$val\n";
  }

  exit 0;

3
@RitchMelton,如果原帖作者对使用这些工具中的任何一个来解决问题感兴趣,请停止删除标签。这并不是你应该做出的决定。 - A5C1D2H2I1M1N2O1R2T1
@Ananda Mahto - 他在哪里说他对那个感兴趣了? - Ritch Melton
@RitchMelton,他用那些工具打了标签,而你一直在删除这些标签。 - A5C1D2H2I1M1N2O1R2T1
我移除了标签,因为人们经常过度标记。这是一个无意义的事情。我以为有人撤销了我的编辑,所以我重新做了一遍。你在假设恶意,其实根本不存在。 - Ritch Melton
@AnandaMahto,但也许不是。 - hobbs
显示剩余3条评论
7个回答

5
在 R 中,您可以使用 strsplitpaste 来进行操作:
Strings <- c("TTTGGC","TTTG","TGCAATGG")
vapply(strsplit(Strings, ""), function(x) paste(x, collapse=","), character(1L))
# [1] "T,T,T,G,G,C"     "T,T,T,G"         "T,G,C,A,A,T,G,G"

你可以使用writeLines来输出内容,如果需要,可指定sep = "\n"

+1 另一个想法:gsub("(?!^|$)", ",", Strings, perl = T) - alexis_laz

3

您的代码使用循环逐行打印@values的值,因此计算机执行了您告诉它要做的事情。尝试以下代码:

print join ",", @values;

甚至可以将您的代码压缩到以下程度:
print join ",", split //, $data;

3
使用Perl一行命令:
perl -F -lane 'print join ",", @F' file

输出

T,T,T,G,G,C
T,T,T,G
T,G,C,A,A,T,G,G

1
+1 TIMTOWTDI:perl -F -lane '$,=",";print @F' file,虽然我不确定为每行设置 $, 是否会成为一个大开销。可能将其放在 BEGIN 块中。 - jaypal singh

1

awk一行命令:

awk -v FS='' -v OFS="," '$1=$1' file

1
open my $in, '<','in.txt';
open my $out, '>', 'out.txt';

while(<$in>){
    chomp;
    my @split = split(//);
    print $out join ",", @split;
    print $out "\n";
}

我认为下投票是因为该行末尾有额外的逗号。 - mpapec
@mpapec 这就是我想的。我已经进行了更正以解决这个问题。 - fugu

1

或者使用 stringr 包:

txt <- c("TTTGGC", "TTTG", "TGCAATGG") 
unlist(str_split(string=txt, pattern= ""))
 [1] ""  "T" "T" "T" "G" "G" "C" ""  "T" "T" "T" "G" ""  "T" "G" "C" "A" "A" "T" "G" "G"

1
额,什么?我不认为这是原帖作者想要的结果。 - Rich Scriven

0
这是一个使用基本R函数的快速简单方法。 paste 的文档实际上指出,paste 可以用作 strsplit 的“相反”操作。
在这里,paste0collapse = "," 很好用。
> txt <- c("TTTGGC", "TTTG", "TGCAATGG")  ## your data
> sapply(strsplit(txt, ""), paste0, collapse = ",")
# [1] "T,T,T,G,G,C"     "T,T,T,G"         "T,G,C,A,A,T,G,G"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接