一题多解 面试题

    最近在其他论坛上看到几个网友的面试题,这些天,QQ群内的人都在讨论怎么解答才最简单,下面列出题目:

文件a:                文件b:

a b c                  a b c

b c a                  b c a

c b a                  c a b

a a a                  1 1 1

b b b                  2 2 2

c c c                  3 3 3

要求合并2个文件如下:

a b c a b c

b c a b c a

c a b c a b

a a a 1 1 1

b b b 2 2 2

c c c 3 3 3

 最简单的答案看下面:

 
 
  1. [root@Virtual ~]# paste -d ' ' a b 
  2. a b c a b c 
  3. b c a b c a 
  4. c b a c a b 
  5. a a a 1 1 1 
  6. b b b 2 2 2 
  7. c c c 3 3 3 

awk大牛给的答案:

 
 
  1. [root@Virtual ~]# awk 'NR==FNR{a[NR]=$0}NR>FNR{print a[FNR],$0}' a b 
  2. a b c a b c 
  3. b c a b c a 
  4. c b a c a b 
  5. a a a 1 1 1 
  6. b b b 2 2 2 
  7. c c c 3 3 3 

shell版本的答案:

 

 
 
  1. cat test.sh  
  2. while read a b c 
  3. do  
  4.         while read d e f  
  5.         do 
  6.                 echo "$d $e $f"|awk -v a=$a -v b=$b -v c=$c -F'\n' '{print $0,""a"",""b"",""c""}'  
  7.                 sed -i '1d' a 
  8.                 break 
  9.         done < a 
  10. done <  b 
  11.  
  12. 输出结果: 
  13. ./test.sh    
  14. a b c a b c 
  15. b c a b c a 
  16. c a b c a b 
  17. a a a 1 1 1 
  18. b b b 2 2 2 
  19. c c c 3 3 3 

最后附上我的python的答案:

 
 
  1. [root@Virtual ~]# vi test.py 
  2. [root@Virtual ~]# python test.py 
  3. a b c a b c 
  4. b c a b c a 
  5. c b a c a b 
  6. a a a 1 1 1 
  7. b b b 2 2 2 
  8. c c c 3 3 3 
  9. [root@Virtual ~]# cat test.py 
  10. #!/usr/bin/env python 
  11. import linecache 
  12. f=open('/root/a'
  13. LineCount=len(f.readlines()) 
  14.  
  15. for i in range(1,LineCount+1): 
  16.         a=linecache.getline("/root/a",i) 
  17.         b=linecache.getline("/root/b",i) 
  18.  
  19.         print a.strip(),b.strip() 
  20. [root@Virtual ~]# 

   这个题目的答案还有许多的解答方法,比如用sed估计也可以,用perl也没问题。。。如果你知道,请不吝赐教。。。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值