Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226132
  • 博文数量: 29
  • 博客积分: 1477
  • 博客等级: 上尉
  • 技术积分: 451
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-06 14:48
文章分类
文章存档

2012年(1)

2011年(14)

2010年(14)

我的朋友

分类:

2011-02-23 09:27:45

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目录下执行
阅读(1436) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~