分享

awk 同时处理多个文件

 Clay*more 2014-03-03

今天学习了一下用awk 处理多个文件,分享一下。

有一个文件 test1.txt内容如下:

  1. 10.37.212.3 host1  
  2. 10.38.212.52 host2  
  3. 10.39.34.22 host3  


另一个文件test2.txt内容如下:

  1. IP host1  
  2. IP host2  
  3. IP host3  
  4. IP host4  

需要将test2.txt 中的hostn 替换成test1.txt 中的相应IP,替换结果应该如下:

  1. IP 10.37.212.3  
  2. IP 10.38.212.52  
  3. IP 10.39.34.22  
  4. IP host4  


第一种方法,适用于2个及其以上的文件处理:

  1. awk 'FILENAME=="file1"{....}FILENAME=="file2"{....}' file1 file2  
  1. awk 'FILENAME==ARGV[1]{....}FILENAME==ARGV[2]{....}' file1 file2  
  1. awk 'ARGIND==1{....}ARGIND==2{....}' file1 file2  

 利用上面的方法实现需求:

  1. awk 'FILENAME=="test.txt" {ar[$2]=$1}; FILENAME=="test2.txt"{if($2 in ar) {print $1,ar[$2]} else {print $0}}' test.txt test2.txt  
  1. awk 'FILENAME==ARGV[1] {ar[$2]=$1}; FILENAME==ARGV[2]{if($2 in ar) {print $1,ar[$2]} else {print $0}}' test.txt test2.txt  
  1. awk 'ARGIND==1 {ar[$2]=$1}; ARGIND==2{if($2 in ar) {print $1,ar[$2]} else {print $0}}' test.txt test2.txt  

还有一种方法, 更多的用于2个文件的处理:

  1. awk 'NR==FNR{处理第一个文本;next}{处理第二个文本}' file1 file2  
  1. awk 'NR==FNR{.....}NR>FNR{....}' file1 file2  

利用上面的公式实现需求:

  1. awk 'NR==FNR{ar[$2]=$1;next}{if($2 in ar) {print $1,ar[$2]} else {print $0}}' test.txt test2.txt  
  1. awk 'NR==FNR{ar[$2]=$1}NR>FNR{if($2 in ar) {print $1,ar[$2]} else {print $0}}' test.txt test2.txt  



    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多