百度脚本笔试题两道

 原贴:http://roclinux.cn/?p=800

最近碰到两道脚本题:

1、写脚本实现,可以用shell、perl等。在目录/tmp下找到100个以abc开头的文件,然后把这些文件的第一行保存到文件new中。
2、写脚本实现,可以用shell、perl等。把文件b中有的,但是文件a中没有的所有行,保存为文件c,并统计c的行数。
解答思路:

1:觉得用shell更好一些,代码如下

#!/bin/sh
for filename in `find /tmp -type f -name "abc*"|head -n 100`
do
sed -n '1p' $filename>>new
done

注释:第一,用到了find命令,其中-type f表示选取普通文件,-name用于设定文件名;第二,head -n 100命令用于取出前100项。第三,sed -n ‘1p’用于取出文件的第一行内容。第四,>>new表示追加到文件new中。
2:第二个题目还是用perl更方便一些,代码如下:
[rocrocket@wupengchong shellstudy]$ cat roc.pl

#!/usr/bin/perl -w
open B,"<b" or die "b error.($!)";
open C,">c" or die "c error.($!)";
my $find=0;
my ($myb,$mya);
while(<B>){
	$find=0;
	chomp($myb=$_);
	print "B ",$myb,"/n";
	open A,"<a" or die "a error.($!)";
	while(<A>){
		chomp($mya=$_);
		print "A ",$mya,"/n";
		if($mya=~/$myb/){
			$find=1;
			print "FIND!/n";
		}
	}
	if($find==0){
		print C $myb,"/n";
	}
}
close A;
close B;
close C;
$linenum=`cat c|wc -l`;
print "c line count:",$linenum;

第二题一直没有很好的思路,就只好用笨方法实现了。
看看哪位能有更好的方法和思路?希望能留言交流:D
当然shell、perl、python都欢迎!
over~

我猜您对这些文章感兴趣:

Posted by rocrocket @ 7:52 pm

Tags: , , , , ,

203人阅读过了这篇文章。

如果您还满意我的文章,请您订阅我的博客。点击“我要订阅”即可。谢谢:)

<<返回主页

7 Responses

WP_Cloudy
  • Shell.E.Xu Says:

    with open(”b”,”r”) as f:
    set1 = set(f.readlines ());
    with open(”a”,”r”) as f:
    set2 = set(f.readlines ());
    count = 0;
    with open(”c”, w) as f:
    for line in list(set1 - set2):
    f.write (line);
    count += 1;
    print count;

  • Shell.E.Xu Says:

    TMD又没有格式,凑合看看吧。
    用了2.6的with语法,简洁多了。2.5以下需要启用或者干脆自己close。
    其实核心就一句set1 - set2

  • dongbin Says:

    find /tmp -type f -name “abc*”|head -n 100|xargs head -q -n 1

  • dongbin Says:

    第二题 Ruby实现:

    #!/usr/bin/ruby

    File.open(ARGV[2]) do |f|
    f.write((File.readlines(ARGV[0]) - File.readlines(ARGV[1])).join(”/n”))
    end

  • dongbin Says:

    第二题Ruby实现

    File.open(ARGV[2]) do |f|
    f.write((File.readlines(ARGV[0]) - File.readlines(ARGV[1])).join(”/n”))
    end

  • dongbin Says:

    第二题Ruby实现:

    File.open(ARGV[2]) do |f|
    f.write((File.readlines(ARGV[0]) - File.readlines(ARGV[1])).join(”/n”))
    end

  • sanding Says:

    不懂perl。。。
    awk ‘NR==FNR{a[$0]=1}NR!=FNR&&!a[$0]{print > “c”}’ a b

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值