Как использовать сценарии Unix, чтобы показать все 'n' символов длинную группу строк? - PullRequest
1 голос
/ 09 июля 2010

Это как бы связано с другим вопросом - Код гольфа: «Цветная подсветка» повторяющегося текста

Я пытаюсь найти способ разбить файл на все »n 'длинных групп символов.

Например: если файл содержит ТОЛЬКО следующий текст:

ABCDEFGHIJ

И мы хотим, чтобы он был разбит на наборы по 3, результат должен быть:*

ABC
BCD
CDE
DEF
EFG
FGH
GHI
HIJ

Ни один символ в файле не должен трактоваться иначе, чем другой.то есть "пробел" - это просто еще один символ, который должен следовать приведенному выше правилу ...

Ответы [ 2 ]

2 голосов
/ 09 июля 2010

СЭД:

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"

Баш и кш:

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

ЗШ:

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

sh (в частности, Dash):

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.

0 голосов
/ 09 июля 2010

Должен ли он быть основан на оболочке или вы открыты для других языков сценариев? Вот версия на Python:

width = 3
data = open("file").read()
for x in xrange(len(data) - width + 1):
    print data[x : x+width]
...