1

これは別の質問にリンクされています-コードゴルフ:繰り返されるテキストの「色の強調表示」

ファイルをすべての「n」文字の長いグループに分割する方法を見つけようとしています。

例:ファイルが次のテキストのみで構成されている場合:

ABCDEFGHIJ

そして、それを3つのセットに分割したいのですが、出力は次のようになります。

ABC
BCD
CDE
DEF
EFG
FGH
GHI
HIJ

ファイル内の文字が他の文字と異なって扱われることはありません。つまり、「スペース」は、上記のルールに従う必要がある単なる別の文字です。

4

2 に答える 2

2

sed:

echo "ABCDEFGHIJ" | sed -n ':a;/^...$/{p;b};s/.../&\n/;P;s/.//;s/\n//;ba'

より一般化されたsedバージョン:

num=5; echo "ABCDEFGHIJ" | sed -n ":a;/^.\{$num\}\$/{p;b};s/.\{$num\}/&\n/;P;s/.//;s/\n//;ba"

Bashとksh:

string="ABCDEFGHIJ"
for ((i=0;i<=${#string}-3;i++)); do echo ${string:i:3}; done

zsh:

string="ABCDEFGHIJ"
for ((i=1;i<=${#string}-2;i++)); do echo $string[i,i+2]; done

sh(具体的にはダッシュ):

string='ABCDEFGHIJ'
count=$(seq $((${#string}-2)))
for i in $count; do b="$b?"; done
for i in $count; do b="${b%?}"; echo "${string%$b}"; string="${string#?}"; done

AWK:

echo "ABCDEFGHIJ" | awk -v num=4 '{for (i=1; i<length($0)-num;i++) print substr($0,i,num)}'

編集:sedより一般化されたバージョンとAWKバージョンを追加しました。

于 2010-07-09T06:19:53.220 に答える
0

シェルベースである必要がありますか、それとも他のスクリプト言語を使用できますか?Pythonのバージョンは次のとおりです。

width = 3
data = open("file").read()
for x in xrange(len(data) - width + 1):
    print data[x : x+width]
于 2010-07-09T06:21:06.977 に答える