LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 789|回复: 5

关于使用awk查询两个文件的问题?

[复制链接]
发表于 2005-12-9 14:42:23 | 显示全部楼层 |阅读模式

file1               
111 aaa      
344 ddd      
744 ccc        

file2
233   bbb
677   ccc
888  aaa
932   fff
892   eee
需求:
当file1中$2部分与file2中$2部分相同的,将file1的$1部分附加成file2的$3显示输出或>file3
用awk怎么实现?
请大虾指教!TKS
发表于 2005-12-9 17:38:55 | 显示全部楼层

  1. [No.567 17:45:02 work ]# cat my_paste.sh
  2. #! /bin/bash
  3. #Written by huan

  4. awk '{print $0}' file1 | while read f1a f1b
  5. do
  6.         awk '{print $0}' file2 | while read f2a f2b
  7.         do
  8.                 if [[ $f1b == $f2b ]];then
  9.                         echo $f2a $f2b $f1a
  10.                 fi
  11.         done
  12. done
复制代码

用不上awk
也许是我没学好awk。。。
回复 支持 反对

使用道具 举报

发表于 2005-12-9 19:20:51 | 显示全部楼层

  1. eieng@deb013:~$ awk '
  2. > FILENAME=="file1"{array[$2]=$1}
  3. > FILENAME=="file2"{if($2 in array) $3=array[$2];print}' file1 file2
  4. 233 bbb
  5. 677 ccc 744
  6. 888 aaa 111
  7. 932 fff
  8. 892 eee
  9. eieng@deb013:~$
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-10 14:38:22 | 显示全部楼层
awk 'NR==FNR{a[$2]=$1}NR>FNR&&a[$2]{print $0,a[$2]}' file1 file2
别的大虾教偶的方法,给大家参考一下~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-12-10 14:59:28 | 显示全部楼层
Post by huan

  1. [No.567 17:45:02 work ]# cat my_paste.sh
  2. #! /bin/bash
  3. #Written by huan

  4. awk '{print $0}' file1 | while read f1a f1b
  5. do
  6.         awk '{print $0}' file2 | while read f2a f2b
  7.         do
  8.                 if [[ $f1b == $f2b ]];then
  9.                         echo $f2a $f2b $f1a
  10.                 fi
  11.         done
  12. done
复制代码

用不上awk
也许是我没学好awk。。。


这位兄弟和偶的境界差不多~
呵呵~
回复 支持 反对

使用道具 举报

发表于 2005-12-10 19:36:22 | 显示全部楼层
惭愧惭愧
grep,sed,awk
我没一个学好嘀
只不过有点C基础
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表