各位高手快来帮我看看这样的文本要如何处理?

sh/bash/dash/ksh/zsh等Shell脚本
回复
coldweb
帖子: 45
注册时间: 2008-03-22 1:19
联系:

各位高手快来帮我看看这样的文本要如何处理?

#1

帖子 coldweb » 2009-07-15 9:48

如题,file01内容如下:
STD
abc kkk
889.33 64.36
def 888
2000089

文件2:file02内容如下:
889.330 63.360 2000011
999.118 64.289 2000015
746.167 30.457 1860089
....
....现在需要做的是提取file01中的第三行:889.33 64.36 与file02中的内容进行搜索并找出满足有889.33和64.36的行. 并将匹配到的行的第三列值:2000011替换到file01中的第五行去.即用2000011替换2000089
因为类似file01的文件有很多,但格式是一样的,只要进行跟file02的内容进行匹配就可以.需要用到循环.
在这恳请各位大侠帮帮忙看看,先谢过了.
头像
yingfei
帖子: 273
注册时间: 2007-09-03 18:34
来自: 羊城通

Re: 各位高手快来帮我看看这样的文本要如何处理?

#2

帖子 yingfei » 2009-07-15 10:27

代码: 全选

yingfei@~$ cat a
STD
abc kkk
889.33 64.36
def 888
2000089

yingfei@~$ cat b
889.330 64.360 2000011
999.118 64.289 2000015
746.167 30.457 1860089

yingfei@~$ STR=$(grep "`awk '(NR==3){printf "%.03f %.03f",$1,$2}' a`" b | awk '{print $3}'); sed -i -e "5s/.*/$STR/" a
yingfei@~$ cat a
STD
abc kkk
889.33 64.36
def 888
2000011

yingfei@~$ 
coldweb
帖子: 45
注册时间: 2008-03-22 1:19
联系:

Re: 各位高手快来帮我看看这样的文本要如何处理?

#3

帖子 coldweb » 2009-07-15 10:51

呵呵,太感谢了,我看看
头像
yingfei
帖子: 273
注册时间: 2007-09-03 18:34
来自: 羊城通

Re: 各位高手快来帮我看看这样的文本要如何处理?

#4

帖子 yingfei » 2009-07-15 10:56

把 a 换成你的 file01 把 b 换成你的 file02
要循环的话就

代码: 全选

for  F  in  file* ; do
STR=$(grep "`awk '(NR==3){printf "%.03f %.03f",$1,$2}'   $F`"   file_02  | awk '{print $3}')
sed -i -e "5s/.*/$STR/"   $F
done
要求sed版本要支持 -i 参数. 早期的 Unix系统中 Sed 不支持这个参数的。这时可以考虑用 perl.
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

Re: 各位高手快来帮我看看这样的文本要如何处理?

#5

帖子 eexpress » 2009-07-15 10:56

lol 这都有人帮忙。不错。

似乎这不具备通用性的事情,通常自己写脚本了。
● 鸣学
头像
yingfei
帖子: 273
注册时间: 2007-09-03 18:34
来自: 羊城通

Re: 各位高手快来帮我看看这样的文本要如何处理?

#6

帖子 yingfei » 2009-07-15 10:58

晕的 怎么老连接不上, 害我提交多次, 严重影响RP。。。
请版主删除。。
头像
daf3707
论坛版主
帖子: 12730
注册时间: 2007-06-13 15:57
来自: 在他乡

Re: 各位高手快来帮我看看这样的文本要如何处理?

#7

帖子 daf3707 » 2009-07-15 11:21

:em09
回复