如何使用unix脚本显示所有'n'个字符的长字符串组?

时间:2010-07-09 05:49:38

标签: unix shell grep cut

这与另一个问题有关 - Code golf: "Color highlighting" of repeated text

我想找出一种方法将文件分成所有'n'个字符的长组。

例如:如果文件仅包含以下文本:

ABCDEFGHIJ

我们希望它分为3组,输出应为:

ABC
BCD
CDE
DEF
EFG
FGH
GHI
HIJ

文件中的任何字符都不会与另一个字符区别对待。即,“空间”只是另一个符合上述规则的角色......

2 个答案:

答案 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]