将16章的每个字与前面所有章节的字进行比较,看有没有相同。。。。。。。。。到了后来就是将40章、50章与前面的所有章比较fnan 写了:实际上是简单的事情,不过就一个txt文件吧,怎样分辨16章15章的,只有一行一行而已,还是说任何地方找到任何相同的字标出来?(与贴出来的古字比较就不会了,看不懂古字)
for循环比较(已解决)
-
- 帖子: 294
- 注册时间: 2009-07-05 19:43
Re: 求助,shell脚本的编写
-----寂寞的存在,孤独的思考----
- ChenFengyuan
- 帖子: 770
- 注册时间: 2008-03-23 0:39
Re: 求助,shell脚本的编写
图片的?
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 求助,shell脚本的编写
真是图片的,这要先图片识别出古字,再比较txt文件,虽说不是做不到,真的难度非常高,(不会古字的免提,还有谁愿意公开这种算法?)不如每个图片为一个文件,用现代汉字命名,比如图片 ‘道‘ 就是文件 道.png
处理好字再按照字生成图片文件,比较现实。
处理好字再按照字生成图片文件,比较现实。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 294
- 注册时间: 2009-07-05 19:43
Re: 求助,shell脚本的编写
额~~~我就是只需要那个daodejing文本文件中的对比~减少重复的所对应古字的搜索。比如“挫其锐解其纷和其光同其尘”,在第4章有了,后面的56章也有,那么我在第56章的时候就不用再去相应网站搜索这些字了fnan 写了:真是图片的,这要先图片识别出古字,再比较txt文件,虽说不是做不到,真的难度非常高,(不会古字的免提,还有谁愿意公开这种算法?)不如每个图片为一个文件,用现代汉字命名,比如图片 ‘道‘ 就是文件 道.png
处理好字再按照字生成图片文件,比较现实。
-----寂寞的存在,孤独的思考----
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 求助,shell脚本的编写
#必须先说明是拿什么跟txt文件对比,是图形还是文字,如果是文字,它们在那里?如果是图形,应该明白图形不能直接跟文字对比。思考者 写了:额~~~我就是只需要那个daodejing文本文件中的对比~减少重复的所对应古字的搜索。比如“挫其锐解其纷和其光同其尘”,在第4章有了,后面的56章也有,那么我在第56章的时候就不用再去相应网站搜索这些字了fnan 写了:真是图片的,这要先图片识别出古字,再比较txt文件,虽说不是做不到,真的难度非常高,(不会古字的免提,还有谁愿意公开这种算法?)不如每个图片为一个文件,用现代汉字命名,比如图片 ‘道‘ 就是文件 道.png
处理好字再按照字生成图片文件,比较现实。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 求助,shell脚本的编写
想了两天,终于大概明白LZ的意图,比如第1到15章的文字已经找到对应的古字图片,第16章的前30行也是,第31行开始与前面的比较,找出已有的汉字。
那么把图片文件贴上来干什么,不如贴1到15其中一两章。
那么把图片文件贴上来干什么,不如贴1到15其中一两章。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 求助,shell脚本的编写
LZ没有提供已有图片的txt文件,提取daodejing.txt的1到28行分为ddj1.txt ddj2.txt ddj3.txt ,作为已有图片的txt文件,daodejing.txt 作为ddj4.txt, 1到30行已有图片,从31行开始比较以前的所有汉字:
kose3@kose3-laptop:~$ sed -r '1,30d;s/\w/&\n/g' ddj4.txt|while read c;do [ $c ] && sed -rn "/$c/{s/:[^:]*$/:$c/p;q}" <<<"$(grep -Hn '' ddj{1..3}.txt)$(grep -Hn '' ddj4.txt|head -30)" || echo;done
ddj2.txt:9:致
ddj1.txt:5:虚
ddj1.txt:9:守
ddj4.txt:29:静
ddj1.txt:1:万
ddj1.txt:1:物
ddj1.txt:3:作
ddj1.txt:7:吾
ddj1.txt:1:以
ddj1.txt:1:观
ddj3.txt:7:复
ddj1.txt:3:夫
ddj1.txt:1:物
ddj3.txt:7:复
ddj3.txt:7:归
ddj1.txt:1:其
ddj2.txt:1:根
ddj3.txt:7:归
ddj2.txt:1:根
ddj3.txt:7:曰
ddj4.txt:29:静
ddj1.txt:3:是
ddj1.txt:1:谓
ddj3.txt:7:复
ddj3.txt:7:复
ddj3.txt:7:曰
ddj1.txt:1:常
ddj1.txt:3:知
ddj1.txt:1:常
ddj3.txt:7:曰
ddj2.txt:9:明
ddj1.txt:3:不
ddj1.txt:3:知
ddj1.txt:1:常
ddj1.txt:3:作
ddj1.txt:3:知
ddj1.txt:1:常
ddj4.txt:29:容
ddj4.txt:29:容
ddj1.txt:1:天
ddj1.txt:1:天
ddj1.txt:1:道
ddj1.txt:1:道
ddj2.txt:3:久
ddj2.txt:3:身
ddj1.txt:3:不
。。。。。。。。
#不考虑优化效率,数分钟就有方案了,这种效果吗?
kose3@kose3-laptop:~$ sed -r '1,30d;s/\w/&\n/g' ddj4.txt|while read c;do [ $c ] && sed -rn "/$c/{s/:[^:]*$/:$c/p;q}" <<<"$(grep -Hn '' ddj{1..3}.txt)$(grep -Hn '' ddj4.txt|head -30)" || echo;done
ddj2.txt:9:致
ddj1.txt:5:虚
ddj1.txt:9:守
ddj4.txt:29:静
ddj1.txt:1:万
ddj1.txt:1:物
ddj1.txt:3:作
ddj1.txt:7:吾
ddj1.txt:1:以
ddj1.txt:1:观
ddj3.txt:7:复
ddj1.txt:3:夫
ddj1.txt:1:物
ddj3.txt:7:复
ddj3.txt:7:归
ddj1.txt:1:其
ddj2.txt:1:根
ddj3.txt:7:归
ddj2.txt:1:根
ddj3.txt:7:曰
ddj4.txt:29:静
ddj1.txt:3:是
ddj1.txt:1:谓
ddj3.txt:7:复
ddj3.txt:7:复
ddj3.txt:7:曰
ddj1.txt:1:常
ddj1.txt:3:知
ddj1.txt:1:常
ddj3.txt:7:曰
ddj2.txt:9:明
ddj1.txt:3:不
ddj1.txt:3:知
ddj1.txt:1:常
ddj1.txt:3:作
ddj1.txt:3:知
ddj1.txt:1:常
ddj4.txt:29:容
ddj4.txt:29:容
ddj1.txt:1:天
ddj1.txt:1:天
ddj1.txt:1:道
ddj1.txt:1:道
ddj2.txt:3:久
ddj2.txt:3:身
ddj1.txt:3:不
。。。。。。。。
#不考虑优化效率,数分钟就有方案了,这种效果吗?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 294
- 注册时间: 2009-07-05 19:43
Re: 求助,shell脚本的编写
额,我想展示下成果fnan 写了:想了两天,终于大概明白LZ的意图,比如第1到15章的文字已经找到对应的古字图片,第16章的前30行也是,第31行开始与前面的比较,找出已有的汉字。
那么把图片文件贴上来干什么,不如贴1到15其中一两章。



-----寂寞的存在,孤独的思考----
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 求助,shell脚本的编写
#原来是单文件,那就更简单了,我给出的是多文件与任意行混合,简化一下就可以。思考者 写了:额,我想展示下成果fnan 写了:想了两天,终于大概明白LZ的意图,比如第1到15章的文字已经找到对应的古字图片,第16章的前30行也是,第31行开始与前面的比较,找出已有的汉字。
那么把图片文件贴上来干什么,不如贴1到15其中一两章。是每一行一章,跟图片完全无关
在每一章中,逐字与前面所有章的所有字比较,比如第16章中,从第一个字到最后一个字都要与前面15章的所以字比较,类似的,在第54章中,也要从第一个字到最后一个字都要与前面53章的所以字比较,第81章中,要与前面80章的所有字比较,你在下面写的那个看着好像是
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 294
- 注册时间: 2009-07-05 19:43
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: for循环比较
arry=($(head -15 ddj.txt));for i in $(sed '16!d;s/./& /g' ddj.txt);do printf "$i ";for n in ${!arry[@]};do if [[ ${arry[$n]} == ""*$i*"" ]];then printf "$((n+1)) ";fi;done;echo;echo;done
#数组for。
#数组for。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 294
- 注册时间: 2009-07-05 19:43
Re: for循环比较
代码: 全选
cloudy@cloudy-laptop:~/tmp/shell$ cat moder-ddj.sh
#!/bin/bash
File=/home/cloudy/tmp/ddj.txt
arry=($(head -16 $File))
for i in $(sed '17!d;s/./& /g' $File )
do
printf "$i "
for n in ${!arry[@]}
do
if [[ ${arry[$n]} == ""*$i*"" ]]
then
printf "$((n+1)) "
fi
done
echo
echo
done > 17ddj
awk '{if($2 != "") {printf $1 "\t" $2 "\n\n"}}' 17ddj > 17
exit 0

如果那个16、17能循环到81就更好了
-----寂寞的存在,孤独的思考----
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: for循环比较(已解决)
代码: 全选
#!/bin/bash
File=~/ddj.txt
for l in {16..81}
do
arry=($(head -$(($l-1)) $File))
for i in $(sed "${l}!d;s/./& /g" $File )
do
for n in ${!arry[@]}
do
if [[ ${arry[$n]} == ""*$i*"" ]]
then
echo "$i $((n+1))"
echo
break
fi
done
done > $l
echo "$l/81"
done
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。