如何将每三个字符放在一个新行上?

时间:2012-07-26 19:39:28

标签: string shell

我有一个包含字符串的文件,例如:

ATCGGTCAA

我需要在每三个字符后添加一个新行,这样每行只出现三个字符,例如:

ATC
GGT
CAA

如何在shell中进行此转换?

11 个答案:

答案 0 :(得分:10)

使用fold shell命令:

fold -w3

答案 1 :(得分:2)

perl -e '$/=\3; while(<>) { print $_ . "\n" }'

答案 2 :(得分:1)

有一个名为fold的unix命令:

fold -3 < inputfile > outputfile

答案 3 :(得分:1)

python版本:

chunk = in.read(3)
while len(chunk) > 0:
    out.write(chunk + "\n")
    chunk = in.read(3)

答案 4 :(得分:0)

while (<>) {
   chomp;
   print("$_\n") for /.{1,3}/sg;
}

无脚本:(又名one-liner aka bash)

perl -nle'print for /.{1,3}/sg' file.in >file.out

perl -i~ -nle'print for /.{1,3}/sg' file    # In-place

特点:

  • 最后你不会得到空行。
  • 即使你最后没有新行,也能正常工作。
  • 即使您没有三个字符的倍数,它也能正常工作。
  • 即使你有多行也行。

(更新)请注意,目前发布的所有其他解决方案(William Pursell,Hunter McMillen和anttix)都添加了一个空白行。 (更新)和jterrace的

答案 5 :(得分:0)

您可以使用模数运算符在字符串的长度上轻松完成此操作。

伪代码:

myString = "ATCGGTCAA";
count = 0;

for(c in myString)
{  
   if((count+1) % 3 == 0 && count != 0) print "\n";
   print c;
}

答案 6 :(得分:0)

假设在Linux上使用GNU

sed -i .bak -e 's/.../&\n/g' file.txt

答案 7 :(得分:0)

另一个python单行:

a = 'ATCGGTCAA'
splitted = '\n'.join([a[i:i+3] for i in range(len(a) / 3)])

答案 8 :(得分:0)

一个过于聪明(但很有趣)的python 2-liner:

a=iter( 'ATCGGTCAA' )
print '\n'.join( ''.join(x) for x in zip(a,a,a) ) 

答案 9 :(得分:0)

...
in=f.read() #'ATCGGTCAA...'
out=''
count=0
for i in s:
    out+=i
    count+=1
    if not count%3:
        out+='\n'
print>>f2, out

输出:

ATC
GGT
CAA
...

答案 10 :(得分:0)

只是为了好玩:

,[.,.,.[-]++++++++++.,]