分页: 1 / 1

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

发表于 : 2009-07-15 9:48
coldweb
如题,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的内容进行匹配就可以.需要用到循环.
在这恳请各位大侠帮帮忙看看,先谢过了.

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

发表于 : 2009-07-15 10:27
yingfei

代码: 全选

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@~$ 

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

发表于 : 2009-07-15 10:51
coldweb
呵呵,太感谢了,我看看

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

发表于 : 2009-07-15 10:56
yingfei
把 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.

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

发表于 : 2009-07-15 10:56
eexpress
lol 这都有人帮忙。不错。

似乎这不具备通用性的事情,通常自己写脚本了。

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

发表于 : 2009-07-15 10:58
yingfei
晕的 怎么老连接不上, 害我提交多次, 严重影响RP。。。
请版主删除。。

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

发表于 : 2009-07-15 11:21
daf3707
:em09