百度脚本笔试题两道

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更方便一些,代码如下:
[[email protected] 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;
时间: 2024-07-30 13:38:32

百度脚本笔试题两道的相关文章

笔试题两道

昨天师兄去参加笔试,回来和我探讨了几题蛮有意思的,现在贴上来两题分享一下. 第一题 char c = 0xff; // 1111 1111 printf("%d",c); //以整数形式输出 有人直接写出是255,其实这是没有深入去研究,我也会经常犯这种错误: 下面我们仔细来探讨下,char是八位的有符号的,所以他的大小范围是在   -128~127  ,然本体我们说255必然是错的了:如果换位unsigned char的话,那么输出255肯定是对的. 下面我们探讨答案是多少,有些人可

c++笔试题两道,求解当中一道

1.Implement a functionthat prints the numbers from 1 to 100.But for multiples of three(3) print "Zif"insteadof the number and for the multiples of five(5) print "Nab". For numbers whichare multiples of both three and five print "Z

c++笔试题两道,求解其中一道

1.Implement a functionthat prints the numbers from 1 to 100.But for multiples of three(3) print "Zif"insteadof the number and for the multiples of five(5) print "Nab". For numbers whichare multiples of both three and five print "Z

[笔试题] 两个有趣的问题

有n瓶粉末,一瓶有毒.有毒的粉末融在水里一小时后水会变蓝.你有一些试管,问最少需要多少时间和多少试管就能确定毒粉末呢?不考虑粉末导入试管的时间. 这道题最基本的想法就是时间换空间或者空间换时间,即n个试管用1小时的时间,或者1个试管用n小时依次试验过来.在实际生产中应该偏向于空间换时间,因为硬性资源可以增加,而程序如果找不到好的优化方法运行时间基本也就定了,所以时间比空间重要的多.但是这两个显然都不是什么好办法.另外一个比较好的解决办法就是二分,把瓶子分两组,花一个小时排除掉一半的瓶子,再花一个

经典笔试题:两个线程交替打印奇偶数

一.采用对象的wait() notify()方法实现 package com.gaopeng.programming; import java.util.concurrent.TimeUnit; /** * 经典笔试题:交替打印奇偶数 采用对象的wait() notify()方法实现 * * @author gaopeng * */ public class OddEvenThread { private static volatile Integer counter = 0; public s

百度数据挖掘笔试题

一.简答题(本题共30分) 1.如何理解继承.多态.组合,请举例说明它们的应用.(10分) 2.请列举出进程间通信的几种方式(至少列举出三种).(10分) 3.请写出贝叶斯公式,请描述朴素贝叶斯分类方法的原理和步骤.(10分) 二.算法与程序设计(本题共40分) 1.两个长度为100的随机向量X和Y,X=(x1,x2,x3,…,xn),Y=(y1,y2,y3,…,yn),其中xi和yi都是从均值为0,标准差为1的正态分布中随机选择的数,随机变量Z为X何Y的相关系数,请问: 1)Z的期望和标准差是

[2013百度软件研发笔试题] 求字符串中连续出现同样字符的最大值

题目完整描写叙述为:用递归的方式实现一个求字符串中连续出现同样字符的最大值.如aaabbcc,连续出现a的最大值为3,abbc,连续出现字符最大的值为2. 下面是我想出来的方法: #include <iostream> using namespace std; #define MAX(a, b) (a) > (b) ? (a) : (b) int Get(char *s, int n, int m)  //字符指针, 当前最长串, max最长串 {     if(*(s+1) == '\

百度2017笔试题:寻找n个员工中未打卡的那一个

声明:图片来自网络,笔者只是试着做了一下,然后做个记录. 拿到这个题目的时候,笔者首先想到的是二分.两个数组,一个是全体员工的集合A:一个是缺少一人的集合B.对A,B排序,再对B进行二分,得到B的中间员工的工号mid,若A[mid] == B[mid],那么缺席员工的工号在mid之后,继续二分:若A[mid] < B[mid],那么缺席员工的工号在mid之前,继续二分.值得注意的是,这里A[mid]是不会大于B[mid]的.另外,这里的二分仅针对缺席工号在数组中间的情况.若缺席工号在数组(当然是

[2013百度软件研发笔试题] 求字符串中连续出现相同字符的最大值

题目完整描述为:用递归的方式实现一个求字符串中连续出现相同字符的最大值,如aaabbcc,连续出现a的最大值为3,abbc,连续出现字符最大的值为2. 以下是我想出来的方法: #include <iostream> using namespace std; #define MAX(a, b) (a) > (b) ? (a) : (b) int Get(char *s, int n, int m)  //字符指针, 当前最长串, max最长串 {     if(*(s+1) == '\0'