当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 8 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 抓取文本, 寻求支持
帖子发表于 : 2009-09-04 20:26 

注册: 2007-07-11 22:45
帖子: 435
送出感谢: 0 次
接收感谢: 0 次
从一个文本文档里面抓取我要的东西:
手动操作是:
vi test.log
翻到最后, 向上查找"Input" (也就是查找全文的最后一个 Input 关键词)
从Input往下数5行,开始抓取;
知道遇到一行全是连续的“
-------(英文模式)

具体的要抓取的部分如下:

65775 Input orientation:
65776 ---------------------------------------------------------------------
65777 Center Atomic Atomic Coordinates (Angstroms)
65778 Number Number Type X Y Z
65779 ---------------------------------------------------------------------
65780 1 78 0 0.000000 0.000000 0.000000
65781 2 7 0 1.958104 -0.742371 0.000000
65782 3 6 0 2.937967 0.226819 0.000000
65783 4 6 0 2.310061 -2.033209 0.000000
65784 5 6 0 4.296722 -0.117260 0.000000
65785 6 6 0 3.656131 -2.429088 0.000000
65786 7 1 0 1.501025 -2.756568 0.000000
65787 8 6 0 4.660240 -1.462620 0.000000
65788 9 1 0 5.046413 0.666470 0.000000
65789 10 1 0 3.890618 -3.488131 0.000000
65790 11 1 0 5.707348 -1.748232 0.000000
65791 12 7 0 -1.958104 0.742371 0.000000
65792 13 6 0 -2.937967 -0.226819 0.000000
65793 14 6 0 -2.310061 2.033209 0.000000
65794 15 6 0 -4.296722 0.117260 0.000000
65795 16 6 0 -3.656131 2.429088 0.000000
65796 17 1 0 -1.501025 2.756568 0.000000
65797 18 6 0 -4.660240 1.462620 0.000000
65798 19 1 0 -5.046413 -0.666470 0.000000
65799 20 1 0 -3.890618 3.488131 0.000000
65800 21 1 0 -5.707348 1.748232 0.000000
65801 22 7 0 1.007661 1.685953 0.000000
65802 23 6 0 2.443290 1.566302 0.000000
65803 24 6 0 1.812978 3.669152 0.000000
65804 25 6 0 2.953047 2.847057 0.000000
65805 26 1 0 1.758903 4.750634 0.000000
65806 27 1 0 3.984815 3.167627 0.000000
65807 28 7 0 -1.007661 -1.685953 0.000000
65808 29 6 0 -2.443290 -1.566302 0.000000
65809 30 6 0 -1.812978 -3.669152 0.000000
65810 31 6 0 -2.953047 -2.847057 0.000000
65811 32 1 0 -1.758903 -4.750634 0.000000
65812 33 1 0 -3.984815 -3.167627 0.000000
65813 34 7 0 0.651375 2.935013 0.000000
65814 35 7 0 -0.651375 -2.935013 0.000000
65815 ---------------------------------------------------------------------


很规则,每个文档中的
-------------
长短都是一样的,
而且Input下没的,肯定是一行
-------------------------
然后两行字符
再是一行
------------------------------

如果依照------------------来区分,
就是抓取Input下面的
第二个--------------------和第三个-----------------之间的行。

比如上面的文档,要抓取的是
65780 到65814 行。

而且对于每一行,需要截取15-70列
也就是cut -c15-70

由于文档很多。当放在一个目录下:
文件名字都是*.log
我希望这个脚本能做到
command *.log
给出的操作结果是:
*_Fianl_Geom.txt


目前我只会手动操作, 不能自动。
希望大侠指点一下子....


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 抓取文本, 寻求支持
帖子发表于 : 2009-09-04 20:51 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
反找啊。。。
cat xxx|rev|sed '/input/Q'|rev|sed '5p'

大概吧。


_________________
● 鸣学


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 抓取文本, 寻求支持
帖子发表于 : 2009-09-04 21:07 

注册: 2007-07-11 22:45
帖子: 435
送出感谢: 0 次
接收感谢: 0 次
eexpress 写道:
反找啊。。。
cat xxx|rev|sed '/input/Q'|rev|sed '5p'

大概吧。

不太明白这个处理方法。

rev是把每一行,倒置 不知道这里能带来什么效果?
只是在行内操作阿....


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 抓取文本, 寻求支持
帖子发表于 : 2009-09-04 21:10 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
额。是tac
你改改吧


_________________
● 鸣学


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 抓取文本, 寻求支持
帖子发表于 : 2009-09-04 22:25 
头像

注册: 2009-05-20 19:32
帖子: 2462
送出感谢: 0 次
接收感谢: 2
tac | sed -n '/^-*$/, /Input/p;/Input/Q' | tac | sed '6,$p'


_________________
irc 聊天室
ubuntu-cn 的irc 频道为
irc.ubuntu.com 8001 #ubuntu-cn
UTF8编码 可用 irssi xchat pidgin weechat 登录

http://webchat.freenode.net/?channels=ubuntu-cn
irc://irc.freenode.net/ubuntu-cn


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 抓取文本, 寻求支持
帖子发表于 : 2009-09-04 22:51 

注册: 2007-07-11 22:45
帖子: 435
送出感谢: 0 次
接收感谢: 0 次
要睡觉了 明天接着处理.....


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 抓取文本, 寻求支持
帖子发表于 : 2009-09-05 11:02 

注册: 2007-07-11 22:45
帖子: 435
送出感谢: 0 次
接收感谢: 0 次
接着报告结果....
tac | sed -n '/^-*$/, /Input/p;/Input/Q' | tac | sed '6,$p'

这个指令,sed '6,$p' 是指打印Input下面的第6行到结尾?

可是,并不需要到结尾部分,只需要Input下面, 第二个'--------------------'和第三个'---------------------'之间的内容。

现在问题比较有趣了,
用这个指令处理之后,我需要的部分得到的文件中Input关键词对应的部分之出现了一次。
而且就在文家的开始。
但是问题是,
没行都重复出现一次:比如下面的
[abbott@master Sep4]$ head -15 new
Input orientation:
---------------------------------------------------------------------
Center Atomic Atomic Coordinates (Angstroms)
Number Number Type X Y Z
---------------------------------------------------------------------
1 44 0 0.253521 -0.040437 0.038171
1 44 0 0.253521 -0.040437 0.038171
2 7 0 0.207605 -0.088924 2.047046
2 7 0 0.207605 -0.088924 2.047046
3 6 0 0.473479 1.047563 2.739500
3 6 0 0.473479 1.047563 2.739500
4 6 0 0.122699 -1.288950 2.675139
4 6 0 0.122699 -1.288950 2.675139
5 6 0 0.590113 1.038255 4.135153
5 6 0 0.590113 1.038255 4.135153

当然可以在用一次uniq 处理一次。
处理指令:

给出处理之后的前面100行:
[abbott@master Sep4]$ cat Ru2b1a1Gr.log | tac | sed -n '/^-*$/, /Input/p;/Input/Q' | tac | sed '6,$p' | uniq > new
[abbott@master Sep4]$ head -100 new
Input orientation:
---------------------------------------------------------------------
Center Atomic Atomic Coordinates (Angstroms)
Number Number Type X Y Z
---------------------------------------------------------------------
1 44 0 0.253521 -0.040437 0.038171
2 7 0 0.207605 -0.088924 2.047046
3 6 0 0.473479 1.047563 2.739500
4 6 0 0.122699 -1.288950 2.675139
5 6 0 0.590113 1.038255 4.135153
6 6 0 0.225589 -1.389421 4.068284
7 6 0 0.449986 -0.200913 4.791632
8 1 0 0.803306 1.940894 4.695141
9 1 0 0.159922 -2.343654 4.577129
10 1 0 0.540235 -0.244227 5.872113
11 7 0 -0.021440 -2.077754 0.390521
12 6 0 -0.120506 -3.268209 -0.224780
13 6 0 -0.207216 -4.327031 0.729516
14 1 0 -0.112789 -3.326698 -1.302259
15 6 0 -0.150839 -3.724510 1.978183
16 1 0 -0.291343 -5.382323 0.523886
17 1 0 -0.173760 -4.158280 2.965625
18 7 0 0.585758 1.965729 0.501890
19 6 0 0.844961 3.164265 -0.047586
20 6 0 1.065130 4.148902 0.963016
21 1 0 0.877974 3.275904 -1.120382
22 6 0 0.932435 3.489971 2.176929
23 1 0 1.295845 5.191937 0.815197
24 1 0 1.029934 3.857522 3.186445
25 7 0 -0.041912 -2.360171 1.774550
26 7 0 0.637795 2.166781 1.899255
27 7 0 0.300939 0.009876 -2.042284
28 6 0 -0.914718 0.209517 -2.664149
29 6 0 1.426852 -0.138303 -2.796925
30 6 0 -1.010565 0.262557 -4.062984
31 6 0 1.388136 -0.093881 -4.196213
32 1 0 2.344118 -0.291419 -2.238548
33 6 0 0.150854 0.109591 -4.839733
34 1 0 -1.957592 0.418651 -4.567504
35 1 0 2.296664 -0.214284 -4.774059
36 7 0 -1.741752 0.271294 -0.402982
37 6 0 -2.740712 0.395745 0.518833
38 6 0 -2.057239 0.355649 -1.745585
39 6 0 -4.072085 0.605497 0.157554
40 1 0 -2.447823 0.323076 1.558976
41 6 0 -3.381315 0.565929 -2.166894
42 6 0 -4.401799 0.692737 -1.211375
43 1 0 -4.847169 0.701015 0.910488
44 1 0 -3.632720 0.632508 -3.218172
45 17 0 2.688156 -0.413046 0.283271
46 6 0 0.018363 0.170507 -6.326246
47 8 0 -1.053250 0.347716 -6.925656
48 8 0 1.228352 0.006843 -6.964970
49 1 0 1.136587 0.047679 -7.944251
50 6 0 -5.826359 0.917033 -1.595033
51 8 0 -6.759061 1.034618 -0.787349
52 8 0 -5.992745 0.979822 -2.964215
53 1 0 -6.933207 1.127872 -3.214213
---------------------------------------------------------------------
Stoichiometry C23H17ClN7O4Ru(1+)
Framework group C1[X(C23H17ClN7O4Ru)]
Deg. of freedom 153
Full point group C1
Largest Abelian subgroup C1 NOp 1
Largest concise Abelian subgroup C1 NOp 1
Standard orientation:
---------------------------------------------------------------------
Center Atomic Atomic Coordinates (Angstroms)
Number Number Type X Y Z
---------------------------------------------------------------------
1 44 0 -0.768529 -0.580609 -0.000031
2 7 0 -2.662344 0.092817 0.000097
3 6 0 -3.318596 0.212757 1.181930
4 6 0 -3.318701 0.213062 -1.181643
5 6 0 -4.678543 0.544336 1.228147
6 6 0 -4.678638 0.544707 -1.227655
7 6 0 -5.347553 0.720269 0.000298
8 1 0 -5.209886 0.640868 2.167376
9 1 0 -5.210042 0.641567 -2.166816
10 1 0 -6.403001 0.972241 0.000376
11 7 0 -1.165441 -0.479902 -2.045205
12 6 0 -0.637918 -0.739184 -3.253544
13 6 0 -1.592714 -0.495197 -4.287052
14 1 0 0.376946 -1.095666 -3.339650
15 6 0 -2.750195 -0.072765 -3.648955
16 1 0 -1.448386 -0.620805 -5.348370
17 1 0 -3.710757 0.204411 -4.054193
18 7 0 -1.165294 -0.480575 2.045131
19 6 0 -0.637560 -0.739798 3.253394
20 6 0 -1.592309 -0.496161 4.287026
21 1 0 0.377390 -1.096072 3.339350
22 6 0 -2.749937 -0.073858 3.649108
23 1 0 -1.447840 -0.621871 5.348312
24 1 0 -3.710500 0.203104 4.054489
25 7 0 -2.491748 -0.059327 -2.289625
26 7 0 -2.491573 -0.059988 2.289768
27 7 0 1.192814 -1.277891 -0.000086
28 6 0 2.173386 -0.306874 0.000000
29 6 0 1.548774 -2.594104 -0.000206
30 6 0 3.533089 -0.653205 0.000012


但是我需要的,仅仅是(Input算第一行) 6到58行:Input下面第二个----------------------行于第三个----------------------行之间的内容......
我可以通过别的方式,获取每个文档中,第二个------与第三个-------之间有多少行,比如这个是53,

后来我发现,你的指令其实少了一个选项,
我修改为:
cat Ru2b1a1Gr.log | tac | sed -n '/^-*$/, /Input/p;/Input/Q' | tac | sed -n 6,"$line"p > Geom.txt
[abbott@master Sep4]$ cat Ru2b1a1Gr.log | tac | sed -n '/^-*$/, /Input/p;/Input/Q' | tac | sed -n 6,"$line"p > Geom.txt
[abbott@master Sep4]$ cat Geom.txt
1 44 0 0.253521 -0.040437 0.038171
2 7 0 0.207605 -0.088924 2.047046
3 6 0 0.473479 1.047563 2.739500
4 6 0 0.122699 -1.288950 2.675139
5 6 0 0.590113 1.038255 4.135153
6 6 0 0.225589 -1.389421 4.068284
7 6 0 0.449986 -0.200913 4.791632
8 1 0 0.803306 1.940894 4.695141
9 1 0 0.159922 -2.343654 4.577129
10 1 0 0.540235 -0.244227 5.872113
11 7 0 -0.021440 -2.077754 0.390521
12 6 0 -0.120506 -3.268209 -0.224780
13 6 0 -0.207216 -4.327031 0.729516
14 1 0 -0.112789 -3.326698 -1.302259
15 6 0 -0.150839 -3.724510 1.978183
16 1 0 -0.291343 -5.382323 0.523886
17 1 0 -0.173760 -4.158280 2.965625
18 7 0 0.585758 1.965729 0.501890
19 6 0 0.844961 3.164265 -0.047586
20 6 0 1.065130 4.148902 0.963016
21 1 0 0.877974 3.275904 -1.120382
22 6 0 0.932435 3.489971 2.176929
23 1 0 1.295845 5.191937 0.815197
24 1 0 1.029934 3.857522 3.186445
25 7 0 -0.041912 -2.360171 1.774550
26 7 0 0.637795 2.166781 1.899255
27 7 0 0.300939 0.009876 -2.042284
28 6 0 -0.914718 0.209517 -2.664149
29 6 0 1.426852 -0.138303 -2.796925
30 6 0 -1.010565 0.262557 -4.062984
31 6 0 1.388136 -0.093881 -4.196213
32 1 0 2.344118 -0.291419 -2.238548
33 6 0 0.150854 0.109591 -4.839733
34 1 0 -1.957592 0.418651 -4.567504
35 1 0 2.296664 -0.214284 -4.774059
36 7 0 -1.741752 0.271294 -0.402982
37 6 0 -2.740712 0.395745 0.518833
38 6 0 -2.057239 0.355649 -1.745585
39 6 0 -4.072085 0.605497 0.157554
40 1 0 -2.447823 0.323076 1.558976
41 6 0 -3.381315 0.565929 -2.166894
42 6 0 -4.401799 0.692737 -1.211375
43 1 0 -4.847169 0.701015 0.910488
44 1 0 -3.632720 0.632508 -3.218172
45 17 0 2.688156 -0.413046 0.283271
46 6 0 0.018363 0.170507 -6.326246
47 8 0 -1.053250 0.347716 -6.925656
48 8 0 1.228352 0.006843 -6.964970
49 1 0 1.136587 0.047679 -7.944251
50 6 0 -5.826359 0.917033 -1.595033
51 8 0 -6.759061 1.034618 -0.787349
52 8 0 -5.992745 0.979822 -2.964215
53 1 0 -6.933207 1.127872 -3.214213

这样就达到了我的要求。

我也不是很明白-n是干什么的,不过加上之后能用。
$line 是我的参数,通过别的方式来获取行数。


sed -n '/^-*$/, /Input/p;/Input/Q'
这个用法 不太明白什么意思,
大侠能否指点一下?

另,我的操作是在CentOS 5.3 64bit搞定的。
[abbott@master Sep4]$ sed --version
GNU sed version 4.1.5
Copyright (C) 2003 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
to the extent permitted by law.

[abbott@master Sep4]$ tac -v
tac: invalid option -- v
Try `tac --help' for more information.
[abbott@master Sep4]$ tac --version
tac (GNU coreutils) 5.97
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software. You may redistribute copies of it under the terms of
the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.
There is NO WARRANTY, to the extent permitted by law.

Written by Jay Lepreau and David MacKenzie.


现在要作的是,把这行代码放到脚本里,让他自己循环处理.....


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 抓取文本, 寻求支持
帖子发表于 : 2009-09-06 7:18 

注册: 2008-05-24 8:30
帖子: 1453
送出感谢: 2
接收感谢: 30
代码:
#!/usr/bin/awk
/Input/ {n=0; s="";}
/---------------------------------------------------------------------/ {n++;}
n==2 {s=s "\n" $0;}
END {print s;}


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 8 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译