Chinaunix首页 | 论坛 | 博客
  • 博客访问: 492913
  • 博文数量: 71
  • 博客积分: 1332
  • 博客等级: 少尉
  • 技术积分: 772
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-10 16:25
个人简介

文章分类

全部博文(71)

文章存档

2013年(19)

2012年(9)

2011年(43)

分类: Python/Ruby

2011-04-02 16:31:38

续  awk 实用操作记录 精妙用法 No.3

http://blog.chinaunix.net/space.php?uid=25505925&do=blog&id=202739

    awk 实用操作记录 精妙用法 No.2

   awk 实用操作记录 精妙用法 No.1


1.5、打印 b 文件内容,如果 a 文件第二列在 b 中出现,则将 a 文件第一列附加到对应打印行中。

原始文件

  1. # cat a
  2. 1000 北京市 地级 北京市 北京市
  3. 1100 天津市 地级 天津市 天津市
  4. 1210 石家庄市 地级 石家庄市 河北省
  5. 1210 晋州市 县级 石家庄市 河北省
  6. 1243 滦县 县级 唐山市 河北省
  7. 1244 滦南县 县级 唐山市 河北省

  8. # cat b
  9. 110000,北京市
  10. 120000,天津市
  11. 130000,河北省
  12. 130131,平山县
  13. 130132,元氏县
预期结果

  1. 110000,北京市,1000
  2. 120000,天津市,1100
  3. 130000,河北省,
  4. 130131,平山县,
  5. 130132,元氏县,
命令

  1. # awk 'BEGIN{FS="[ |,]";OFS=","}NR<=FNR{a[$2]=$1}NR>FNR{print $1,$2,a[$2]}' a b
备注:
FS指定分隔符含义:
FS="[=|,]"
以“=”或“,”分隔
FS="[=,]"
以“=”和“,”分隔
(解释不对的地方烦请留言哈)
1.6、
原始文件

  1. # cat file1
  2. AAA 001 1000.00
  3. BBB 001 2000.00
  4. DDD 002 4000.00
  5. EEE 002 5000.00
  6. FFF 003 6000.00

  7. # cat file2
  8. 01 1111 AAA WW001 $$$$ 1000.00
  9. 02 2222 BBB GG001 %%%% 2000.00
  10. 03 3333 CCC JJ001 **** 3000.00
  11. 04 4444 DDD FF002 &&&& 4000.00
  12. 05 5555 EEE RR002 @@@@ 5000.00
  13. 06 6666 FFF UU003 JJJJ 6000.00
  14. 07 7777 III II005 PPPP 7000.00
  15. 08 8888 TTT TT008 TTTT 8000.00
预期结果

  1. 01 1111 AAA WW001 $$$$ 1000.00
  2. 02 2222 BBB GG001 %%%% 2000.00
  3. 04 4444 DDD FF002 &&&& 4000.00
  4. 05 5555 EEE RR002 @@@@ 5000.00
  5. 06 6666 FFF UU003 JJJJ 6000.00
命令

  1. awk 'NR==FNR{a[$1]=$1$2$3}NR>FNR{b=substr($4,3);c=$3b$6;if(c==a[$3])print}' file1 file2

2、内部变量汇总:

  1. NR:已经读取的记录条数
  2. FNR:正在读取的文件中已经读取的记录条数
  3. ARGIND:文件所在参数列表的位置
  4. ARGC:命令行参数的个数
  5. ARGV:命令行参数数组
  6. FS:用于指定记录域分隔符
  7. OFS:用于指定输出记录域分割符
  8. NF:记录域的个数
  9. ORS:记录的分隔符








阅读(1127) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~