当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 21 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-30 10:15 
头像

注册: 2007-01-16 21:27
帖子: 76
地址: 上海
送出感谢: 0 次
接收感谢: 0 次
比如一下一段文本:

/Intel/pkgs/Snv/STEPnicdrv-1_4-1-Snv/reloc/source/src/tools/stf/contrib/logapi/README
/Intel/pkgs/Snv/STEPtcp-2_6_2-19-Snv/reloc/source/usr/ontest/README
/Intel/pkgs/Snv/STEPnfsv3-1_2_8-2-Snv/reloc/source/usr/ontest/util/stcpkgtool/nfsv2/README
/Intel/pkgs/Snv/STEPdiskomizer_hba-1_0-10-Snv/reloc/wrapper/README
/Intel/pkgs/Snv/STEPtslvm_NIGHTLY-4_9-3-Snv/reloc/source/sparc/TSmd/reloc/$ROOTSPARC/Sets/README
/Intel/pkgs/Snv/STEPsdts-1_0-10-Snv/reloc/source/src/suites/sdts/README
/Intel/pkgs/Snv/STEPagpgart-1_0-5-Snv/reloc/source/src/suites/agp/agpgart/README
/Intel/pkgs/Snv/STEPdrm-1_0-5-Snv/reloc/source/src/tools/stf/contrib/logapi/README
/Intel/pkgs/Snv/xvm/SUNWstc-virsh/reloc/README
/Intel/pkgs/Snv/STEPddivs-2_11_3-8-Snv/reloc/source/usr/ontest/README
/Intel/pkgs/Snv/STEPnfsv4_test-1_14_14-5-Snv/reloc/source/usr/ontest/util/stcpkgtool/cmgr/README

我想把这些README文件全部copy到tmp目录下去,新的命名根据每一行的第4个字段
比如第一行的/Intel/pkgs/Snv/STEPnicdrv-1_4-1-Snv/reloc/source/src/tools/stf/contrib/logapi/README
cp为/tmp/STEPnicdrv-1_4-1-Snv.README

偶用的熟的只有C,shell脚本还在学习中,不知道应该怎样做文本处理~
呼唤大侠解惑^^


_________________
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-30 10:27 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
代码:
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名


_________________
关注我的blog: ε==3


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-30 15:52 

注册: 2007-01-28 13:52
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
perl可以吗

代码:
#!/usr/bin/perl -w
use strict;

foreach (`find /Intel/pkgs/Snv/ -name "README"`) {
  chomp;
  my @aaa = spilt(/\//);
  system ("cp $_ /tmp/$aaa[4].$aaa[-1]");
}


没实验过 不保证正确
======
保险期间 就把你上面的README文件和路径放到数组里foreach吧 刚刚写时候没考虑到同一目录下不同的子目录都有README文件


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-30 16:41 
头像

注册: 2007-01-16 21:27
帖子: 76
地址: 上海
送出感谢: 0 次
接收感谢: 0 次
yhywl 写道:
perl可以吗

代码:
#!/usr/bin/perl -w
use strict;

foreach (`find /Intel/pkgs/Snv/ -name "README"`) {
  chomp;
  my @aaa = spilt(/\//);
  system ("cp $_ /tmp/$aaa[4].$aaa[-1]");
}


没实验过 不保证正确
======
保险期间 就把你上面的README文件和路径放到数组里foreach吧 刚刚写时候没考虑到同一目录下不同的子目录都有README文件


运行的时候说 Undefined subroutine &main::spilt at line6 就是my @aaa = spilt(/\//);这一句吧
还应该加什么函数定义么?


_________________
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-30 16:45 
头像

注册: 2007-01-16 21:27
帖子: 76
地址: 上海
送出感谢: 0 次
接收感谢: 0 次
bones7456 写道:
代码:
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名

好像不行额~
还有,为什么是$5呢,不是第4个词吗?


_________________
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life


页首
 用户资料  
 
6 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-30 16:54 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
star 写道:
bones7456 写道:
代码:
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名

好像不行额~
还有,为什么是$5呢,不是第4个词吗?

不可能不行
你给出提示或者现象.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
7 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-30 17:01 
头像

注册: 2007-01-16 21:27
帖子: 76
地址: 上海
送出感谢: 0 次
接收感谢: 0 次
为什么是$5我已经知道了,但是这样做$0也会被转换吧~


_________________
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-30 17:04 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
还要求你的路径里面没有空格,有空格的情况没试过.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
9 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-30 18:16 

注册: 2007-01-28 13:52
帖子: 13
送出感谢: 0 次
接收感谢: 0 次
star 写道:
yhywl 写道:
perl可以吗

代码:
#!/usr/bin/perl -w
use strict;

foreach (`find /Intel/pkgs/Snv/ -name "README"`) {
  chomp;
  my @aaa = spilt(/\//);
  system ("cp $_ /tmp/$aaa[4].$aaa[-1]");
}


没实验过 不保证正确
======
保险期间 就把你上面的README文件和路径放到数组里foreach吧 刚刚写时候没考虑到同一目录下不同的子目录都有README文件


运行的时候说 Undefined subroutine &main::spilt at line6 就是my @aaa = spilt(/\//);这一句吧
还应该加什么函数定义么?



不好意思 单词打错了 split


页首
 用户资料  
 
10 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-31 9:54 
头像

注册: 2007-01-16 21:27
帖子: 76
地址: 上海
送出感谢: 0 次
接收感谢: 0 次
bones7456 写道:
star 写道:
bones7456 写道:
代码:
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名

好像不行额~
还有,为什么是$5呢,不是第4个词吗?

不可能不行
你给出提示或者现象.


就是运行完命令之后没有任何反应 /tmp目录下也没有任何文件生成 ;-(


_________________
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life


页首
 用户资料  
 
11 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-10-31 9:55 
头像

注册: 2007-01-16 21:27
帖子: 76
地址: 上海
送出感谢: 0 次
接收感谢: 0 次
自己写了一个 呵呵

引用:
#!/usr/bin/bash

while read line
do
echo "$line"
echo "cp $line /tmp/readme/`echo $line | awk -F/ '{print $5 ".README"}'`"
cp $line /tmp/readme/`echo $line | awk -F/ '{print $5 ".README"}'`
done < /export/result.me


_________________
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life


页首
 用户资料  
 
12 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-11-04 17:47 

注册: 2008-11-04 17:44
帖子: 48
送出感谢: 0 次
接收感谢: 1
star 写道:
bones7456 写道:
star 写道:
bones7456 写道:
代码:
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名

好像不行额~
还有,为什么是$5呢,不是第4个词吗?

不可能不行
你给出提示或者现象.


就是运行完命令之后没有任何反应 /tmp目录下也没有任何文件生成 ;-(


可以运行的,我已经试过
如果不行,建议检查一下权限等问题

或者把代码里的cp改成echo来自助检查一下


页首
 用户资料  
 
13 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-11-04 18:48 
头像

注册: 2005-10-04 10:59
帖子: 1928
地址: 上海
送出感谢: 0 次
接收感谢: 1
我只会写loop。
代码:
for i in `cat 文件名`;do cp $i /tmp/$(echo $i|awk -F/ '{print $5}').README; done


_________________
弄个dropbox空间来备份文件或者做私人代码服务器
配置:git://github.com/roylez/dotfiles.git
主页:http://roylez.heroku.com
各种稀奇玩意儿:http://dooloo.info


页首
 用户资料  
 
14 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-11-06 10:33 
头像

注册: 2007-01-16 21:27
帖子: 76
地址: 上海
送出感谢: 0 次
接收感谢: 0 次
waynehu 写道:
star 写道:
bones7456 写道:
star 写道:
bones7456 写道:
代码:
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名

好像不行额~
还有,为什么是$5呢,不是第4个词吗?

不可能不行
你给出提示或者现象.


就是运行完命令之后没有任何反应 /tmp目录下也没有任何文件生成 ;-(


可以运行的,我已经试过
如果不行,建议检查一下权限等问题

或者把代码里的cp改成echo来自助检查一下


找到一个可能的原因,我现在用的OpenSolaris 里面awk内嵌的system调用没有运行起来
用了一个很WS的方法: awk -F/ '{var="/tmp/"$5".README"; print "cp", $0, var | "/bin/bash"}' result.me 就行了
(如果是print "cp", $0, " /tmp/", $5 , ".README" 的话中间会有空格 ;-( )


_________________
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life


页首
 用户资料  
 
15 楼 
 文章标题 : Re: 呼唤shell脚本高人(有关文本处理)
帖子发表于 : 2008-11-06 10:45 
头像

注册: 2006-04-12 20:05
帖子: 8495
地址: 杭州
送出感谢: 0 次
接收感谢: 8
star 写道:
找到一个可能的原因,我现在用的OpenSolaris 里面awk内嵌的system调用没有运行起来
用了一个很WS的方法: awk -F/ '{var="/tmp/"$5".README"; print "cp", $0, var | "/bin/bash"}' result.me 就行了
(如果是print "cp", $0, " /tmp/", $5 , ".README" 的话中间会有空格 ;-( )

汗...你早说是 OpenSolaris 嘛,awk是啥版本的?如果不是gawk的话,试试装gawk,应该就可以了.


_________________
关注我的blog: ε==3


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 21 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

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


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

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

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