呼唤shell脚本高人(有关文本处理)
- star
- 帖子: 76
- 注册时间: 2007-01-16 21:27
- 来自: 上海
- 联系:
呼唤shell脚本高人(有关文本处理)
比如一下一段文本:
/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脚本还在学习中,不知道应该怎样做文本处理~
呼唤大侠解惑^^
/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
Ubuntu is not my all
But it makes me enjoy all my life
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
Re: 呼唤shell脚本高人(有关文本处理)
代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
关注我的blog: ε==3
-
- 帖子: 13
- 注册时间: 2007-01-28 13:52
Re: 呼唤shell脚本高人(有关文本处理)
perl可以吗
没实验过 不保证正确
======
保险期间 就把你上面的README文件和路径放到数组里foreach吧 刚刚写时候没考虑到同一目录下不同的子目录都有README文件
代码: 全选
#!/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文件
- star
- 帖子: 76
- 注册时间: 2007-01-16 21:27
- 来自: 上海
- 联系:
Re: 呼唤shell脚本高人(有关文本处理)
运行的时候说 Undefined subroutine &main::spilt at line6 就是my @aaa = spilt(/\//);这一句吧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文件
还应该加什么函数定义么?
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life
Ubuntu is not my all
But it makes me enjoy all my life
- star
- 帖子: 76
- 注册时间: 2007-01-16 21:27
- 来自: 上海
- 联系:
Re: 呼唤shell脚本高人(有关文本处理)
好像不行额~bones7456 写了:代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
还有,为什么是$5呢,不是第4个词吗?
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life
Ubuntu is not my all
But it makes me enjoy all my life
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
Re: 呼唤shell脚本高人(有关文本处理)
不可能不行star 写了:好像不行额~bones7456 写了:代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
还有,为什么是$5呢,不是第4个词吗?
你给出提示或者现象.
关注我的blog: ε==3
- star
- 帖子: 76
- 注册时间: 2007-01-16 21:27
- 来自: 上海
- 联系:
Re: 呼唤shell脚本高人(有关文本处理)
为什么是$5我已经知道了,但是这样做$0也会被转换吧~
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life
Ubuntu is not my all
But it makes me enjoy all my life
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
-
- 帖子: 13
- 注册时间: 2007-01-28 13:52
Re: 呼唤shell脚本高人(有关文本处理)
star 写了:运行的时候说 Undefined subroutine &main::spilt at line6 就是my @aaa = spilt(/\//);这一句吧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文件
还应该加什么函数定义么?
不好意思 单词打错了 split
- star
- 帖子: 76
- 注册时间: 2007-01-16 21:27
- 来自: 上海
- 联系:
Re: 呼唤shell脚本高人(有关文本处理)
就是运行完命令之后没有任何反应 /tmp目录下也没有任何文件生成 ;-(bones7456 写了:不可能不行star 写了:好像不行额~bones7456 写了:代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
还有,为什么是$5呢,不是第4个词吗?
你给出提示或者现象.
_______________________________________
Ubuntu is not my all
But it makes me enjoy all my life
Ubuntu is not my all
But it makes me enjoy all my life
- star
- 帖子: 76
- 注册时间: 2007-01-16 21:27
- 来自: 上海
- 联系:
Re: 呼唤shell脚本高人(有关文本处理)
自己写了一个 呵呵
#!/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
Ubuntu is not my all
But it makes me enjoy all my life
-
- 帖子: 48
- 注册时间: 2008-11-04 17:44
Re: 呼唤shell脚本高人(有关文本处理)
可以运行的,我已经试过star 写了:就是运行完命令之后没有任何反应 /tmp目录下也没有任何文件生成 ;-(bones7456 写了:不可能不行star 写了:好像不行额~bones7456 写了:代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
还有,为什么是$5呢,不是第4个词吗?
你给出提示或者现象.
如果不行,建议检查一下权限等问题
或者把代码里的cp改成echo来自助检查一下
- roylez
- 帖子: 1928
- 注册时间: 2005-10-04 10:59
- 来自: 上海
Re: 呼唤shell脚本高人(有关文本处理)
我只会写loop。
代码: 全选
for i in `cat 文件名`;do cp $i /tmp/$(echo $i|awk -F/ '{print $5}').README; done
✡ 弄个dropbox空间来备份文件或者做私人代码服务器?
✡ 配置:[url]git://github.com/roylez/dotfiles.git[/url]
✡ 主页:http://roylez.heroku.com
✡ 各种稀奇玩意儿:http://dooloo.info
✡ 配置:[url]git://github.com/roylez/dotfiles.git[/url]
✡ 主页:http://roylez.heroku.com
✡ 各种稀奇玩意儿:http://dooloo.info
- star
- 帖子: 76
- 注册时间: 2007-01-16 21:27
- 来自: 上海
- 联系:
Re: 呼唤shell脚本高人(有关文本处理)
找到一个可能的原因,我现在用的OpenSolaris 里面awk内嵌的system调用没有运行起来waynehu 写了:可以运行的,我已经试过star 写了:就是运行完命令之后没有任何反应 /tmp目录下也没有任何文件生成 ;-(bones7456 写了:不可能不行star 写了:好像不行额~bones7456 写了:代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
还有,为什么是$5呢,不是第4个词吗?
你给出提示或者现象.
如果不行,建议检查一下权限等问题
或者把代码里的cp改成echo来自助检查一下
用了一个很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
Ubuntu is not my all
But it makes me enjoy all my life
- bones7456
- 帖子: 8495
- 注册时间: 2006-04-12 20:05
- 来自: 杭州
- 联系:
Re: 呼唤shell脚本高人(有关文本处理)
汗...你早说是 OpenSolaris 嘛,awk是啥版本的?如果不是gawk的话,试试装gawk,应该就可以了.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" 的话中间会有空格 ;-( )
关注我的blog: ε==3