{ out=""; for(i=length($cowsay <<<"hello" _______< hello > ------- \ ^__^ \ (oo)\_______ (__)\ )\/\ ||----w | || ||);i>0;i--) { out=out substr($cowsay <<<"hello" | rev_______ > olleh <------- ^__^ \ _______\)oo( \ \/\) \)__( | w----|| || ||,i,1)} print out;}
这似乎扭转了角色,但它是乱码,我不明白为什么.我错过了什么?
我在awk中这样做,但还有更好的东西吗?也许是?
这是一个例子.输入数据如下所示:
#!/usr/bin/awk -f# length(ghoti@pc:~$echo hello | cowsay | ./revawk | tr '[[]()<>/\]' '[][)(><\/]' _______ < olleh > ------- ^__^ / _______/(oo) / /\/( /(__) | w----|| || ||)>max { max=length(printf(fmt," ",o[i]) | "tr '[[]()<>/\]' '[][)(><\/]'";);}{ # Reverse the line... for(i=length();i>0;i--) { o[NR]=o[NR] substr(,1); }}END { for(i=1;i<=NR;i++) { # prepend the output with sufficIEnt padding fmt=sprintf("%%%ds%%s\n",max-length(o[i])); printf(fmt,"",o[i]); }}
输出看起来像这样:
请注意,无论是使用rev还是我自己的awk脚本,输出都是相同的.正如你所看到的,事情是相反的,但……它被破坏了.
解决方法 转速很好,但它不填充输入线.它只是逆转了它们.你看到的“破坏”是因为一行可能是20个字符长,而下一行可能是15个字符长.在输入文本中,它们共享一个左侧列.但是在输出文本中,他们需要共享一个右侧列.
所以你需要填充.哦,和不对称的逆转,正如约阿希姆所说.
这是我的意见:
(我是用gawk做的;我认为我没有使用任何gawkisms,但如果你使用更经典的awk变种,你可能需要调整它.)
使用方法与使用rev的方式相同.
如果您愿意这样做,您甚至可以通过将其添加到最后一个printf行来从awk脚本中运行translate:
但我不推荐它,因为它使revawk命令对其他应用程序不那么有用.
总结以上是内存溢出为你收集整理的图像处理 – 如何水平镜像ascii艺术?全部内容,希望文章能够帮你解决图像处理 – 如何水平镜像ascii艺术?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)