0

たとえば、文字列を含むファイルがあります。

ATCGGTCAA

各行に各 3 文字のみが表示されるように、3 文字ごとに改行する必要があります。

ATC
GGT
CAA

この変換をシェルで行うにはどうすればよいですか?

4

11 に答える 11

10

foldシェル コマンドを使用します。

fold -w3
于 2012-07-26T19:47:07.830 に答える
2
perl -e '$/=\3; while(<>) { print $_ . "\n" }'
于 2012-07-26T19:43:12.183 に答える
1

Python バージョン:

chunk = in.read(3)
while len(chunk) > 0:
    out.write(chunk + "\n")
    chunk = in.read(3)
于 2012-07-26T19:50:48.357 に答える
1

と呼ばれるUNIXコマンドがありますfold

fold -3 < inputfile > outputfile
于 2012-07-26T19:48:19.850 に答える
0

楽しみのために:

,[.,.,.[-]++++++++++.,]
于 2012-07-26T21:56:47.780 に答える
0
while (<>) {
   chomp;
   print("$_\n") for /.{1,3}/sg;
}

スクリプトレス: (別名ワンライナー別名 bash)

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

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

特徴:

  • 最後に空白行が残ることはありません。
  • 最後に改行がなくても機能します。
  • 3 の倍数の文字がなくても機能します。
  • 複数の行がある場合でも機能します。

(更新) 現在投稿されている他のすべてのソリューション (William Pursell、Hunter McMillen、anttix) には空白行が追加されていることに注意してください。(更新) そして jterrace の

于 2012-07-26T19:41:43.953 に答える
0

これは、文字列の長さにモジュラス演算子を使用して非常に簡単に行うことができます。

疑似コード:

myString = "ATCGGTCAA";
count = 0;

for(c in myString)
{  
   if((count+1) % 3 == 0 && count != 0) print "\n";
   print c;
}
于 2012-07-26T19:43:34.080 に答える
0

LinuxでGNU sedを想定

sed -i .bak -e 's/.../&\n/g' file.txt
于 2012-07-26T19:43:38.063 に答える
0

別の python 1 行:

a = 'ATCGGTCAA'
splitted = '\n'.join([a[i:i+3] for i in range(len(a) / 3)])
于 2012-07-26T19:45:28.197 に答える
0

非常に賢い (しかし楽しい) python 2-liner:

a=iter( 'ATCGGTCAA' )
print '\n'.join( ''.join(x) for x in zip(a,a,a) ) 
于 2012-07-26T19:48:35.077 に答える
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
...
于 2012-07-26T19:51:26.313 に答える