我有一个包含字符串的文件,例如:
ATCGGTCAA
我需要在每三个字符后添加一个新行,这样每行只出现三个字符,例如:
ATC
GGT
CAA
如何在shell中进行此转换?
答案 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)
只是为了好玩:
,[.,.,.[-]++++++++++.,]