CU上shell/perl脚本例子集锦
Daniel Wood 20110223
转载时请注明出处和作者
文章出处:http://danielwood.cublog.cn
资料来源:ChinaUnix论坛
作者:Daniel Wood
------------------------------------------------------------
写在前面的话:
以下收录自己在ChinaUnix@shell/perl上写的一些脚本(包括高手写的),虽然自己现在工作用不上,但是也作为自己学习的一种参考,也为以后代码重用做准备。
注:问题版权归提问者所有,高手代码版权归高手所有。
1.利用Shell脚本如何处理一个文本文件的排版格式的转换?
链接:
题目:
有如下一个文本文件(dd.txt):
dddff_110222,dsafljl_110221,opwkpeofk_110221,aldjfjfjlajew_110220, peokssss_110202,kalsdfeeeeee_110201,adddddd_110129, ssssss_110128,fffffffff_110127,aaaaa_110122,
|
将上面的文本文件转成如下格式,并保存至一个文本文件中:
dddff_110222 dsafljl_110221 opwkpeofk_110221 aldjfjfjlajew_110220 peokssss_110202 kalsdfeeeeee_110201 adddddd_110129 ssssss_110128 fffffffff_110127 aaaaa_110122
|
即将逗号去掉,将每一项独立成一行,以便处理。
我的代码:
sed -e 's/,/\n/g' dd.txt | sed '/^$/d' > result.txt
|
高手代码:
tr -s ',' '\n' <dd.txt >result.txt
|
awk -F, '{for (i=1;i dd.txt > result.txt
|
2.求将文件内容按照空行分段,并按照指定内容过滤出需要的结果的shell,具体请进
链接:
题目:文件内容如下,求一个一句话shell,根据指定的字符串,查找并返回配对的内容。
比如,根据GUARD1,返回NODE127;根据GUARD2,返回NODE227;根据GUARD3,返回NODE237
System Database Directory
Number of entries in the directory = 3
Database 1 entry:
Database alias = GUARD1 Database name = ESS5 Node name = NODE127 Database release level = a.00 Comment = Directory entry type = Remote Catalog database partition number = -1 Alternate server hostname = Alternate server port number =
Database 2 entry:
Database alias = GUARD2 Database name = ESS5 Node name = NODE227 Database release level = a.00 Comment = Directory entry type = Remote Catalog database partition number = -1 Alternate server hostname = Alternate server port number =
Database 3 entry:
Database alias = GUARD3 Database name = ESS5 Node name = NODE237 Database release level = a.00 Comment = Directory entry type = Remote Catalog database partition number = -1 Alternate server hostname = Alternate server port number =
|
我的代码:
awk -v flg=0 '{if($2=="alias"&&$4=="GUARD1"){flg=1;}}{if($1=="Node"&&flg){print $4;flg=0;}}' test.txt
|
NODE127
3.shell 计算时间差
链接:
题目:begin="2010-12-11"
end="2010-12-20“
有如上两个变量,我想计算end与begin的时间差,即得到相差的天数~请问如何实现
我的代码:
begin='2010-12-11' end='2010-12-20' echo $(($(($(date +%s -d$end)-$(date +%s -d$begin)))/3600/24))
|
高手代码:
BEGIN="2010-12-11" END="2010-12-20" D1=$(date --utc --date "$BEGIN" +%s) D2=$(date --utc --date "$END" +%s)
diffSec=$((D2-D1)) echo $((diffSec/86400))
|
高手用两个变量(D1,D2)去保存秒比我的好,因为我在写的时候匹配括号上面花了不少时间。
4.复制目录下的文件到对应目录(题目自拟)
链接:
题目:有两个路径下的文件,分别是/home/hh/2009和/home/gg/2009它们下面的子文件夹都是以年计日命名的,例如/home/hh/2009/064,/home/hh/2009/065。。。,我怎么才能把gg下的年计日文件夹里的内容加到hh下相应的年计日文件夹里?就是把/home/hh/2009/064下的内容加到/home/gg/2009/064里。[题目gg和hh搞的不是狠清楚]
我的代码:
#! /bin/bash abcd=`ls` for i in $abcd; do if [ -d $i ]; then cp $i/* /home/hh/2009/$i #echo $i fi done;
|
在/home/gg/2009目录下执行
阅读(1042) | 评论(0) | 转发(0) |