这与另一个问题有关 - Code golf: "Color highlighting" of repeated text
我想找出一种方法将文件分成所有'n'个字符的长组。
例如:如果文件仅包含以下文本:
ABCDEFGHIJ
我们希望它分为3组,输出应为:
ABC
BCD
CDE
DEF
EFG
FGH
GHI
HIJ
文件中的任何字符都不会与另一个字符区别对待。即,“空间”只是另一个符合上述规则的角色......
答案 0 :(得分: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版本。
答案 1 :(得分:0)
它必须是基于shell还是您对其他脚本语言开放?这是Python中的一个版本:
width = 3
data = open("file").read()
for x in xrange(len(data) - width + 1):
print data[x : x+width]