分页: 1 / 2
呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-30 10:15
由 star
比如一下一段文本:
/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脚本还在学习中,不知道应该怎样做文本处理~
呼唤大侠解惑^^
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-30 10:27
由 bones7456
代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-30 15:52
由 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文件
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-30 16:41
由 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(/\//);这一句吧
还应该加什么函数定义么?
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-30 16:45
由 star
bones7456 写了:代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
好像不行额~
还有,为什么是$5呢,不是第4个词吗?
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-30 16:54
由 bones7456
star 写了:bones7456 写了:代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
好像不行额~
还有,为什么是$5呢,不是第4个词吗?
不可能不行
你给出提示或者现象.
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-30 17:01
由 star
为什么是$5我已经知道了,但是这样做$0也会被转换吧~
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-30 17:04
由 bones7456
还要求你的路径里面没有空格,有空格的情况没试过.
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-30 18:16
由 yhywl
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
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-31 9:54
由 star
bones7456 写了:star 写了:bones7456 写了:代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
好像不行额~
还有,为什么是$5呢,不是第4个词吗?
不可能不行
你给出提示或者现象.
就是运行完命令之后没有任何反应 /tmp目录下也没有任何文件生成 ;-(
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-10-31 9:55
由 star
自己写了一个 呵呵
#!/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
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-11-04 17:47
由 waynehu
star 写了:bones7456 写了:star 写了:bones7456 写了:代码: 全选
awk -F/ '{system("cp " $0 " /tmp/" $5 ".README")}' 你的文本文件名
好像不行额~
还有,为什么是$5呢,不是第4个词吗?
不可能不行
你给出提示或者现象.
就是运行完命令之后没有任何反应 /tmp目录下也没有任何文件生成 ;-(
可以运行的,我已经试过
如果不行,建议检查一下权限等问题
或者把代码里的cp改成echo来自助检查一下
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-11-04 18:48
由 roylez
我只会写loop。
代码: 全选
for i in `cat 文件名`;do cp $i /tmp/$(echo $i|awk -F/ '{print $5}').README; done
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-11-06 10:33
由 star
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" 的话中间会有空格 ;-( )
Re: 呼唤shell脚本高人(有关文本处理)
发表于 : 2008-11-06 10:45
由 bones7456
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,应该就可以了.