LinuxSir.Org  
| 网站首页 | 注册账号 | 论坛帮助 |

欢迎来到LinuxSir.Org!
您还未登录,请登录后查看论坛,或者点击论坛上方的注册链接注册新账号。


发表新主题 回复
精华主题  
主题工具
旧 03-09-25, 16:02 第 1 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

标题: 考考你:如何横排变竖排?


像中国的诗歌,如:
大雪压青松
青松挺且直
要知松格在
待到雪化时
如何变成竖版:
待要青大
到知松雪
雪松挺压
化格且青
时在直松
?
  KornLee 当前离线   回复时引用此帖
旧 03-09-25, 18:19 第 2 帖
lucida
 
 
 
注册会员  
  注册日期: Oct 2002
  我的住址: .:DRL:.
  帖子: 2,492
  精华: 9
 

考不考虑中英文混排?
不考虑。。很简单
考虑。。现在我还不会 :(







__________________
E6300@3.2G/P5B-D WiFi/2G RAM/1TB HDD/3540A/7900GT/E-MU 0404
Logitech S 510/MX Revolution/2407WFP/LaserJet 1020
go wild, go Gentoo
  lucida 当前离线   回复时引用此帖
旧 03-09-25, 19:08 第 3 帖
lucida
 
 
 
注册会员  
  注册日期: Oct 2002
  我的住址: .:DRL:.
  帖子: 2,492
  精华: 9
 

标题: 抛砖引玉..


PHP 代码:
#!/bin/bash

if [[ $== "" ]]; then
  
echo usagetrans.sh filename;
  exit 
1;
fi

declare -a str;
let i=1;

while 
read poem
do
   
str[i]=$poem;
   
let i=i+1;
done < $1;

let len=${#str[1]};

for ((k=0;k<=len;k=k+2))
 do
  echo
  for (( 
j=i-1j>=1j-- ))
   do
    echo -
n  ${str[j]:k:2}
   
done
done 
$ ./trans.sh poem1.txt

足老乐玳瞿金女梨风五公先感与妙临晚绛罢来矫霍天观一昔
茧夫极筵塘粟乐园尘十孙帝时余舞颍有唇如如如如地者舞有
荒不哀急石堆余子鸿年剑侍抚问此美弟珠江雷群羿为如剑佳
山知来管城前姿弟洞间器女事答曲人子袖海霆帝射之山器人
转其月曲草木映散昏似初八增既神在传两凝收骖九久色动公
愁所东复萧已寒如王反第千惋有扬白芬寂清震龙日低沮四孙
疾往出终瑟拱日烟室掌一人伤以扬帝芳寞光怒翔落昂丧方氏
。,。,。,。,。,。,。,。,。,。,。,。,。,

此帖于 03-09-25 19:11 被 lucida 编辑.
  lucida 当前离线   回复时引用此帖
旧 03-09-25, 20:35 第 4 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

引用:
最初由 penny 发表
考不考虑中英文混排?
不考虑。。很简单
考虑。。现在我还不会 :(

我也觉得如果是单纯的对仗的诗句是没什么问题的,如果考虑标点符号,还所有中英文等等的因素,呵呵~~,恐怕shell就无能为力啦~~,
我想的比较丑陋 :(

花间一壶酒,独酌无相依.
举杯邀明月,对影成三人.
月既不解饮,影徒随我身.
暂伴月将影,行乐须及春.
我歌月徘徊,我舞影零乱.
醒时同交欢,醉后各分散.
永结无情游,相期藐云汉.
PHP 代码:
#!/bin/ksh
#name:ss
n=1
cont
=$(cat $1|sed -n 1p|wc -c)
while ((
n<=$cont))
do
tac $1|sed 's/\,/aa/g'|tr -' '|cut -c$n-$((n+1))|tr -'\n'
((n+=2));echo "\n"
done|tr -'\n'|sed 's/\./&\ /g'|sed 's/aa/, /g' 
永醒我暂月举花
结时歌伴既杯间
无同月月不邀一
情交徘将解明壶
游欢徊影饮月酒
, , , , , , ,
相醉我行影对独
期后舞乐徒影酌
藐各影须随成无
云分零及我三相
汉散乱春身人依
. . . . . . .

用我的脚本给penny兄的恢复一下
[/home/javalee/myshell]ksh ss sg|rev|tac
昔有佳人公孙氏,
一舞剑器动四方。
观者如山色沮丧,
天地为之久低昂。
霍如羿射九日落,
矫如群帝骖龙翔。
来如雷霆收震怒,
罢如江海凝清光。
绛唇珠袖两寂寞,
晚有弟子传芬芳。
临颍美人在白帝,
妙舞此曲神扬扬。
与余问答既有以,
感时抚事增惋伤。
先帝侍女八千人,
公孙剑器初第一。
五十年间似反掌,
风尘鸿洞昏王室。
梨园子弟散如烟,
女乐余姿映寒日。
金粟堆前木已拱,
瞿塘石城草萧瑟。
玳筵急管曲复终,
乐极哀来月东出。
老夫不知其所往,
足茧荒山转愁疾。

此帖于 03-09-25 20:45 被 KornLee 编辑.
  KornLee 当前离线   回复时引用此帖
旧 03-09-26, 20:11 第 5 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

原文:
代码:
[/home/javalee/myshell]cat song 常常责怪自己 当初不应该 常常後悔没有把你留下来 为甚么明明相爱 到最後还是要分开 是否我们总是 徘徊在心门之外 谁知道又和你相遇在人海 命运如此安排 总教人无奈 这些年过得不好不坏 只是好像少了一个人存在 而我渐渐明白 你仍然是我不变的关怀 有多少爱可以重来 有多少人愿意等待 当懂得珍惜以後回来 却不知那份爱 会不会还在 有多少爱可以重来 有多少人值得等待 当爱情已经桑田沧海 是否还有勇气去爱
PHP 代码:
[/home/javalee/myshell]cat ss
#!/bin/ksh
#
#
len=$(cat $1|while read i;do echo $i|wc -c;echo $i;done>tmp$$
n=1;m=2;l=$(cat tmp$$|wc -l)
while ((
n<=$l))
do
cat tmp$$|sed -"${n},${m}p"|tr -'\n';echo "\n"
((n+=2));((m+=2))
done|tr -'\n'|sort -nr|tr -' '|head -n1|awk '{print $1 $2}'|cut -c1-2
)

cat $1|while read j;do echo $j$(perl -"print 0 x ($len-${#j})");done>new$1

o=1
while ((o<=$len))
do
tac new$1|sed 's/[ ]*[ ]/aa/g'|tr -d ' '|cut -c$o-$((o+1))|tr -d '\n'
((o+=2));echo "\n"
done|tr -s '\n'|sed 's/aa/  /g'|sed 's/0/ /g'
rm new$1 tmp$$ 
END__VBULLETIN__CODE__SNIPPET 
?>
执行后:
代码:
[/home/javalee/myshell]ss song 当有却当有而只这命谁是为常常 爱多不懂多我是些运知否甚常常 情少知得少渐好年如道我么後责 已爱那珍爱渐像过此又们明悔怪 经可份惜可明少得安和总明没自 桑以爱以以白了不排你是相有己 田重 後重 一好 相 爱把 沧来会回来你个不总遇徘 你当 海 不来 仍人坏教在徊到留初 有会 有然存 人人在最下不 是多还 多是在 无海心後来应 否少在 少我 奈 门还 该 还人 人不 之是 有值 愿变 外要 勇得 意的 分 气等 等关 开 去待 待怀 爱
如果加上对标点符号的处理就好啦~~...这是我的笨方法,,,但是如果文本过大的话,我想就太难了! :(
  KornLee 当前离线   回复时引用此帖
旧 03-09-27, 17:59 第 6 帖
x11 帅哥
 
x11 的头像
 
 
注册会员  
  注册日期: Nov 2002
  我的住址: 上海
  帖子: 2,793
  精华: 2
 

有意思: -)







__________________
-..- .---- .----
  x11 当前离线   回复时引用此帖
旧 03-09-27, 18:36 第 7 帖
KornLee
 
 
 
★☆★☆★☆★  
  注册日期: Nov 2002
  我的住址: LinuxWorld
  帖子: 6,960
  精华: 61
 

引用:
最初由 x11 发表
有意思: -)
呵呵~~,x11兄好久没有来啦~~
  KornLee 当前离线   回复时引用此帖
旧 04-07-29, 17:38 第 8 帖
aaccdd
 
aaccdd 的头像
 
 
退役版主  
  注册日期: Aug 2003
  帖子: 3,346
  精华: 16
 

如果使用awk呢?
汉字的编码不都是两个字节吗?
将每一行设为一个awk数组,
每个数组从1-x,x是该行的字符长度;
行数从1-y,用是总行数,
显示的时候提取的数组从y的头两个字符到1的头两个字符是一行,y到1行的3,4字符是第二行,依次类推。标点符号应该也可以。
不知道是否可以。
代码:
1 ... ... x (字符数) 1 . . . y (行数)







__________________
===============================================
论坛使用及常见问题解决办法:
http://bbs.linuxsir.org/showthread.php?t=108946
===============================================
昨日之非不可留,留之则根烬复萌,而尘情终累乎理趣;
今日之是不可执,执之则渣滓未化,而理趣反转为欲根。
===============================================
  aaccdd 当前离线   回复时引用此帖
旧 04-07-29, 18:41 第 9 帖
aaccdd
 
aaccdd 的头像
 
 
退役版主  
  注册日期: Aug 2003
  帖子: 3,346
  精华: 16
 

我写了一个awk脚本,
可以实现横排变竖排,
但是要求输入必须正确,
就是标点符号必须是汉语的,
间隔必须是双字节。(太烦琐了:()
代码:
$ cat test BEGIN{ ORS="" max=length($0) } { if (max<length($0)){max=length($0)} for(t=1;t<=length($0);t++){array[NR,t]=substr($0,t,1)} } END{ for(n=1;n<=max;n=n+2){ for(i=FNR;i>=1;i--){ printf "%-2s", array[i,n]array[i,n+1] } print "\n" } }
代码:
$ cat temp 沁园春-雪 *** 北国风光, 千里冰封, 万里雪飘。 望长城内外, 惟余莽莽; 大河上下, 顿时滔滔。 山舞银蛇, 原驰蜡象, 欲与天公试比高。 须晴日, 看红装素裹, 分外妖娆。 江山如此多娇, 引无数英雄竞折腰。 惜秦皇汉武, 略输文采; 唐宗宋祖, 稍逊风骚。 一代天骄, 成吉思汗, 只识弯弓射大雕。 俱往矣, 数风人物, 还看今朝。 $ awk -f test temp 还数俱只成一稍唐略惜引江 分看须欲原山顿大惟望万千北 毛 沁 看风往识吉代逊宗输秦无山 外红晴与驰舞时河余长里里国 泽 园 今人矣弯思天风宋文皇数如 妖装日天蜡银滔上莽城雪冰风 东 春 朝物,弓汗骄骚祖采汉英此 娆素,公象蛇滔下莽内飘封光 - 。, 射,,。,;武雄多 。裹 试,,。,;外。,, 雪 大 ,竞娇 , 比 , 雕 折, 高 。 腰 。 。

此帖于 04-07-31 06:59 被 aaccdd 编辑.
  aaccdd 当前离线   回复时引用此帖
旧 04-11-21, 18:01 第 10 帖
xiaorui
 
xiaorui 的头像
 
 
注册会员  
  注册日期: Jul 2003
  我的住址: dalian
  帖子: 932
  精华: 3
 

好方法,
呵呵,







__________________
OS:Gentoo
计算机技术推动人类社会进步,社区服务!
gtalk:qubodx@gmail.com

用心读书,静心看书,多做笔记,多多咨询,稳扎稳打。Gentoo on IdeaPadS10
  xiaorui 当前离线   回复时引用此帖
旧 04-11-22, 16:05 第 11 帖
弥敦路九号
 
弥敦路九号 的头像
 
 
注册会员  
  注册日期: Nov 2004
  我的住址: 深圳
  帖子: 1,139
  精华: 4
 

一种新思路
1. 反转文件后,按行拆分成N个文件
2. 每个拆分后的文件(各含有一行文字) 按字分行
3. paste 所有文件

#!/bin/bash

infile="$1"
outfile="$2"
tempdir=`mktemp -d`
cd $tempdir
tac ${OLDPWD}/$infile | split -l 1
cd -
sed -i 's/./&\n/g' $tempdir/*
paste -d '' $tempdir/* > $outfile
rm -rf "$tempdir







__________________
失意时莫灰心,得意时莫忘形
  弥敦路九号 当前离线   回复时引用此帖
旧 05-04-29, 17:58 第 12 帖
aaccdd
 
aaccdd 的头像
 
 
退役版主  
  注册日期: Aug 2003
  帖子: 3,346
  精华: 16
 

楼上的方法很有趣
  aaccdd 当前离线   回复时引用此帖
旧 05-04-30, 00:56 第 13 帖
DSL
 
 
 
注册会员  
  注册日期: Jan 2005
  帖子: 281
  精华: 0
 

都************是高手!
  DSL 当前离线   回复时引用此帖
旧 07-12-23, 12:47 第 14 帖
springwind426
 
springwind426 的头像
 
 
注册会员  
  注册日期: Nov 2003
  帖子: 1,778
  精华: 2
 

代码:
awk 'BEGIN{FS=""} { maxNF=(maxNF<NF)?NF:maxNF; for(i=1;i<=NF;i++) Filds[i,NR]=$i; } END{ for(i=1;i<=maxNF;i++){ for(j=1;j<=NR;j++) printf "%-2s",Filds[i,j]; print ""; } }' 诗文
思路:
用数组来保存诗文
用FS="" 来把每个字符都分隔成一个字段(awk可以很好地处理中文,因此,一个汉字被当作是一个字符)
打印的时候要用printf,来以固定宽度的方式显示,否则有错乱
  springwind426 当前离线   回复时引用此帖
发表新主题 回复


主题工具

发帖规则
您 [不可以] 发表新主题
您 [不可以] 回复主题
您 [不可以] 上传附件
您 [不可以] 编辑您的帖子

已 [启用] BB 代码
已 [启用] 表情符号
已 [启用] IMG 代码
已 [禁用] HTML 代码
[论坛跳转…]


所有时间均为[北京时间]。现在的时间是 12:30


Powered by vBulletin 版本 3.6.8
版权所有 ©2000 - 2010, Jelsoft Enterprises Ltd.
官方中文技术支持: vBulletin 中文
版权所有 ©2002 - 2009, LinuxSir.Org