如何使用unix脚本来显示所有'n'个字符的长字符串组? [英] How to use unix scripts to show all 'n' characters long group of strings?

查看:157
本文介绍了如何使用unix脚本来显示所有'n'个字符的长字符串组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是一种链接到另一个问题 - 代码高尔夫:颜色突出"重复的文本



我试图找出一种将文件分解为所有'n'个字符长组的方法。



例如:如果一个文件只包含以下文本:

  ABCDEFGHIJ 

我们希望将其分成3个集合,输出结果应该是:

  ABC 
BCD
CDE
DEF
EFG
FGH
GHI
HIJ

文件中的任何字符都不会与其他字符区别对待。也就是说,一个空间只是另一个应遵循上述规则的字符......

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

更广义的 sed 版本:

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

Bash和ksh:

  string =ABCDEFGHIJ
));做echo $ {string:i:3};完成

zsh:

 ((i = 1; i <= $ {#string} -2; i ++));  string =ABCDEFGHIJ
做echo $ string [i,i + 2];完成



(特别是破折号):

<$ $ $ $(($ {#string} -2)))
for $ in $ count; pre $ string ='ABCDEFGHIJ'
count = $做b =$ b?;我在$ count中完成
; do b =$ {b%?}; echo$ {string%$ b};字符串= $ {#字符串?};完成

AWK:

  echoABCDEFGHIJ| awk -v num = 4'{for(i = 1; i   

编辑:添加了更广义的 sed 版本和AWK版本。 p>

This IS kind of linked to another question - Code golf: "Color highlighting" of repeated text

I'm tying to figure out a way of breaking a file into all 'n' characters long groups.

Eg: If a file comprises of ONLY the following text:

ABCDEFGHIJ

And we want it broken into sets of 3, the output should be:

ABC
BCD
CDE
DEF
EFG
FGH
GHI
HIJ

No characters in the file are to be treated any differently from another. ie, a "space" is just another character which should follow the rule above...

解决方案

sed:

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

A more generalized sed version:

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

Bash and 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 (specifically 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)}'

Edit: Added a more generalized sed version and an AWK version.

这篇关于如何使用unix脚本来显示所有'n'个字符的长字符串组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆