做一个测试,按某一条件分出来的汇总结果在两个文件中:
1.txt
[code] 140 上海市
131 北京市
98 山东省
83 河南省
78 广东省
62 辽宁省
53 河北省
44 天津市
39 江苏省
35 吉林省
34 湖北省
32 四川省
30 黑龙江省
29 华南理工大学
21 浙江省
21 陕西省
21 山西省
18 广东外语外贸大学
15 上海交通大学
15 美国
……[/code]
2.txt
[code]964 上海市
617 广东省
504 江苏省
424 湖北省
304 浙江省
240 四川省
209 福建省
207 北京市
197 湖南省
167 安徽省
145 陕西省
139 山东省
127 江西省
96 河北省
89 重庆市
87 河南省
64 云南省
51 辽宁省
50 黑龙江省
50 甘肃省
……[/code]
前面为数值,后面为地区。
有什么简便的方法可以以地区为关键字把两个文件中的数据并到一行去?
结果类似以下的形式:
[code] 上海市 140 964
北京市 131 207
山东省 98 139
河南省 83 87
……
美国 15 0[/code]
同一地区不一定会在两个文件中都记录,比如1.txt中的美国在2.txt中会没有。
cat a.sh
#!/bin/sh
if [ $# -ne 2 ];then
echo "Usage:$0 file1 file2"
exit
fi
[code]cat $1 $2|awk '{print $2}'|sort|uniq|while read line;do
num1=`grep "$line" $1|awk '{print $1}'`
num2=`grep "$line" $2|awk '{print $1}'`
if [ -z "$num1" ] ;then
echo $line $num2|awk '{printf "%-20.20s\t%10d\t%10d\n",$1,0,$2}'
elif [ -z "$num2" ] ;then
echo $line $num1|awk '{printf "%-20.20s\t%10d\t%10d\n",$1,$2,0}'
else
echo $line $num1 $num2|awk '{printf "%-20.20s\t%10d\t%10d\n",$1,$2,$3}'
fi
done[/code]
结果
[code][Bossdev]$ sh a.sh 1.txt 2.txt
安徽省 0 167
北京市 131 207
福建省 0 209
甘肃省 0 50
广东省 78 617
广东外语外贸大学 18 0
河北省 53 96
河南省 83 87
黑龙江省 30 50
湖北省 34 424
湖南省 0 197
华南理工大学 29 0
吉林省 35 0
江苏省 39 504
江西省 0 127
辽宁省 62 51
美国 15 0
山东省 98 139
山西省 21 0
陕西省 21 145
上海交通大学 15 0
上海市 140 964
四川省 32 240
天津市 44 0
云南省 0 64
浙江省 21 304
重庆市 0 89[/code]
就是结果的顺序不一致