for循环比较(已解决)

sh/bash/dash/ksh/zsh等Shell脚本
思考者
帖子: 294
注册时间: 2009-07-05 19:43

Re: 求助,shell脚本的编写

#16

帖子 思考者 » 2011-12-11 20:45

fnan 写了:实际上是简单的事情,不过就一个txt文件吧,怎样分辨16章15章的,只有一行一行而已,还是说任何地方找到任何相同的字标出来?(与贴出来的古字比较就不会了,看不懂古字)
将16章的每个字与前面所有章节的字进行比较,看有没有相同。。。。。。。。。到了后来就是将40章、50章与前面的所有章比较
-----寂寞的存在,孤独的思考----
头像
ChenFengyuan
帖子: 770
注册时间: 2008-03-23 0:39

Re: 求助,shell脚本的编写

#17

帖子 ChenFengyuan » 2011-12-11 20:53

图片的?
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助,shell脚本的编写

#18

帖子 fnan » 2011-12-11 21:13

真是图片的,这要先图片识别出古字,再比较txt文件,虽说不是做不到,真的难度非常高,(不会古字的免提,还有谁愿意公开这种算法?)不如每个图片为一个文件,用现代汉字命名,比如图片 ‘道‘ 就是文件 道.png
处理好字再按照字生成图片文件,比较现实。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
思考者
帖子: 294
注册时间: 2009-07-05 19:43

Re: 求助,shell脚本的编写

#19

帖子 思考者 » 2011-12-12 19:43

fnan 写了:真是图片的,这要先图片识别出古字,再比较txt文件,虽说不是做不到,真的难度非常高,(不会古字的免提,还有谁愿意公开这种算法?)不如每个图片为一个文件,用现代汉字命名,比如图片 ‘道‘ 就是文件 道.png
处理好字再按照字生成图片文件,比较现实。
额~~~我就是只需要那个daodejing文本文件中的对比~减少重复的所对应古字的搜索。比如“挫其锐解其纷和其光同其尘”,在第4章有了,后面的56章也有,那么我在第56章的时候就不用再去相应网站搜索这些字了
-----寂寞的存在,孤独的思考----
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助,shell脚本的编写

#20

帖子 fnan » 2011-12-12 22:51

思考者 写了:
fnan 写了:真是图片的,这要先图片识别出古字,再比较txt文件,虽说不是做不到,真的难度非常高,(不会古字的免提,还有谁愿意公开这种算法?)不如每个图片为一个文件,用现代汉字命名,比如图片 ‘道‘ 就是文件 道.png
处理好字再按照字生成图片文件,比较现实。
额~~~我就是只需要那个daodejing文本文件中的对比~减少重复的所对应古字的搜索。比如“挫其锐解其纷和其光同其尘”,在第4章有了,后面的56章也有,那么我在第56章的时候就不用再去相应网站搜索这些字了
#必须先说明是拿什么跟txt文件对比,是图形还是文字,如果是文字,它们在那里?如果是图形,应该明白图形不能直接跟文字对比。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助,shell脚本的编写

#21

帖子 fnan » 2011-12-13 3:19

想了两天,终于大概明白LZ的意图,比如第1到15章的文字已经找到对应的古字图片,第16章的前30行也是,第31行开始与前面的比较,找出已有的汉字。
那么把图片文件贴上来干什么,不如贴1到15其中一两章。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助,shell脚本的编写

#22

帖子 fnan » 2011-12-13 8:01

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:不
。。。。。。。。
#不考虑优化效率,数分钟就有方案了,这种效果吗?
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
思考者
帖子: 294
注册时间: 2009-07-05 19:43

Re: 求助,shell脚本的编写

#23

帖子 思考者 » 2011-12-14 20:47

fnan 写了:想了两天,终于大概明白LZ的意图,比如第1到15章的文字已经找到对应的古字图片,第16章的前30行也是,第31行开始与前面的比较,找出已有的汉字。
那么把图片文件贴上来干什么,不如贴1到15其中一两章。
额,我想展示下成果 :em06 是每一行一章,跟图片完全无关 :em06 在每一章中,逐字与前面所有章的所有字比较,比如第16章中,从第一个字到最后一个字都要与前面15章的所以字比较,类似的,在第54章中,也要从第一个字到最后一个字都要与前面53章的所以字比较,第81章中,要与前面80章的所有字比较,你在下面写的那个看着好像是 :em06
-----寂寞的存在,孤独的思考----
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: 求助,shell脚本的编写

#24

帖子 fnan » 2011-12-15 21:52

思考者 写了:
fnan 写了:想了两天,终于大概明白LZ的意图,比如第1到15章的文字已经找到对应的古字图片,第16章的前30行也是,第31行开始与前面的比较,找出已有的汉字。
那么把图片文件贴上来干什么,不如贴1到15其中一两章。
额,我想展示下成果 :em06 是每一行一章,跟图片完全无关 :em06 在每一章中,逐字与前面所有章的所有字比较,比如第16章中,从第一个字到最后一个字都要与前面15章的所以字比较,类似的,在第54章中,也要从第一个字到最后一个字都要与前面53章的所以字比较,第81章中,要与前面80章的所有字比较,你在下面写的那个看着好像是 :em06
#原来是单文件,那就更简单了,我给出的是多文件与任意行混合,简化一下就可以。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
思考者
帖子: 294
注册时间: 2009-07-05 19:43

Re: for循环比较

#25

帖子 思考者 » 2012-01-15 19:29

一个多月了,今天突然又想起来了,具体看我1楼的描述 :em06
-----寂寞的存在,孤独的思考----
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: for循环比较

#26

帖子 fnan » 2012-01-16 11:14

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。
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
思考者
帖子: 294
注册时间: 2009-07-05 19:43

Re: for循环比较

#27

帖子 思考者 » 2012-01-17 20:53

代码: 全选

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
:em06 我又搞了搞,终于好看点了
如果那个16、17能循环到81就更好了
-----寂寞的存在,孤独的思考----
fnan
帖子: 919
注册时间: 2009-07-01 22:04

Re: for循环比较(已解决)

#28

帖子 fnan » 2012-01-19 2:08

代码: 全选

#!/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++强悍,不过可以用。
回复