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

Это отчасти связано с другим вопросом - гольф Кода: "Выделение цвета" повторного текста

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

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

ABCDEFGHIJ

И мы хотим, в который врываются наборы 3, вывод должен быть:

ABC
BCD
CDE
DEF
EFG
FGH
GHI
HIJ

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

1
задан Community 23 May 2017 в 12:30
поделиться

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 (конкретно 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.

2
ответ дан 2 September 2019 в 23:11
поделиться

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

width = 3
data = open("file").read()
for x in xrange(len(data) - width + 1):
    print data[x : x+width]
0
ответ дан 2 September 2019 в 23:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: