雨
分类: 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.6、
原始文件
- # cat a
- 1000 北京市 地级 北京市 北京市
- 1100 天津市 地级 天津市 天津市
- 1210 石家庄市 地级 石家庄市 河北省
- 1210 晋州市 县级 石家庄市 河北省
- 1243 滦县 县级 唐山市 河北省
- 1244 滦南县 县级 唐山市 河北省
- # cat b
- 110000,北京市
- 120000,天津市
- 130000,河北省
- 130131,平山县
- 130132,元氏县
预期结果
- 110000,北京市,1000
- 120000,天津市,1100
- 130000,河北省,
- 130131,平山县,
- 130132,元氏县,
命令
- # awk 'BEGIN{FS="[ |,]";OFS=","}NR<=FNR{a[$2]=$1}NR>FNR{print $1,$2,a[$2]}' a b
备注:FS指定分隔符含义:FS="[=|,]"以“=”或“,”分隔FS="[=,]"以“=”和“,”分隔(解释不对的地方烦请留言哈)
原始文件
- # cat file1
- AAA 001 1000.00
- BBB 001 2000.00
- DDD 002 4000.00
- EEE 002 5000.00
- FFF 003 6000.00
- # cat file2
- 01 1111 AAA WW001 $$$$ 1000.00
- 02 2222 BBB GG001 %%%% 2000.00
- 03 3333 CCC JJ001 **** 3000.00
- 04 4444 DDD FF002 &&&& 4000.00
- 05 5555 EEE RR002 @@@@ 5000.00
- 06 6666 FFF UU003 JJJJ 6000.00
- 07 7777 III II005 PPPP 7000.00
- 08 8888 TTT TT008 TTTT 8000.00
预期结果
- 01 1111 AAA WW001 $$$$ 1000.00
- 02 2222 BBB GG001 %%%% 2000.00
- 04 4444 DDD FF002 &&&& 4000.00
- 05 5555 EEE RR002 @@@@ 5000.00
- 06 6666 FFF UU003 JJJJ 6000.00
命令
- # awk 'NR==FNR{a[$1]=$1$2$3}NR>FNR{b=substr($4,3);c=$3b$6;if(c==a[$3])print}' file1 file2
- NR:已经读取的记录条数
- FNR:正在读取的文件中已经读取的记录条数
- ARGIND:文件所在参数列表的位置
- ARGC:命令行参数的个数
- ARGV:命令行参数数组
- FS:用于指定记录域分隔符
- OFS:用于指定输出记录域分割符
- NF:记录域的个数
- ORS:记录的分隔符