文件按某一字段合并的问题

做一个测试,按某一条件分出来的汇总结果在两个文件中:
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]

就是结果的顺序不一致

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值