根据公共列合并2个文件的数据

时间:2013-02-04 16:33:59

标签: shell unix

我正在尝试合并2个文件,基于第1列348.csv& 349.csv使用以下命令加入它们时

  

加入-a1 -a2 -1 2 -2 2 348.csv 349.csv

没有获得正确的输出,即混乱输出。

cat 348.csv:

Timestamp                   BRM Servers 
                              348  
1/28/2013 02:00 AM PST        176  
1/28/2013 02:30 AM PST        150
1/28/2013 03:00 AM PST        140
1/28/2013 03:30 AM PST        100

cat 349.csv:

Timestamp                   BRM Servers
                               349  
1/28/2013 02:00 AM PST         99
1/28/2013 02:30 AM PST         115
1/28/2013 03:00 AM PST         101
1/28/2013 03:30 AM PST         78

预计如下:

Timestamp                   BRM Servers 
                             348  349 
1/28/2013 02:00 AM PST       176  99 
1/28/2013 02:30 AM PST       150  115 
1/28/2013 03:00 AM PST       140  101
1/28/2013 03:30 AM PST       100  78

并按顺序。

提前致谢

3 个答案:

答案 0 :(得分:0)

试试这个:

awk 'NR==FNR{i=NF<5?"__":$1$2$3$4;a[i]=$0;next} FNR==1{print}{i=NF<5?"__":$1$2$3$4}FNR>1&&i in a{print a[i],$NF}' file1 file2

使用您的数据进行测试:

kent$  head f1 f2
==> f1 <==
Timestamp                   BRM Servers 
                              348  
1/28/2013 02:00 AM PST        176  
1/28/2013 02:30 AM PST        150
1/28/2013 03:00 AM PST        140
1/28/2013 03:30 AM PST        100

==> f2 <==
Timestamp                   BRM Servers
                               349  
1/28/2013 02:00 AM PST         99
1/28/2013 02:30 AM PST         115
1/28/2013 03:00 AM PST         101
1/28/2013 03:30 AM PST         78

kent$  awk 'NR==FNR{i=NF<5?"__":$1$2$3$4;a[i]=$0;next} FNR==1{print}{i=NF<5?"__":$1$2$3$4}FNR>1&&i in a{print a[i],$NF}' f1 f2
Timestamp                   BRM Servers
                              348   349
1/28/2013 02:00 AM PST        176   99
1/28/2013 02:30 AM PST        150 115
1/28/2013 03:00 AM PST        140 101
1/28/2013 03:30 AM PST        100 78

答案 1 :(得分:0)

我假设您的文件是制表符分隔的。如果没有,“第1列”中的空格将使这项任务变得更加困难。

sed 1q 348.csv
join -t $'\t' -j 1 -o 0,1.2,2.2 <(sed 1d 348.csv) <(sed 1d 349.cvs)

给出制表符分隔的输出,如下所示:

Timestamp       BRM Servers 
        348     349  
1/28/2013 02:00 AM PST  176     99
1/28/2013 02:30 AM PST  150     115
1/28/2013 03:00 AM PST  140     101
1/28/2013 03:30 AM PST  100     78

答案 2 :(得分:0)

我假设你的文件是分隔符

join -a1 -a2 -1 1 -2 1 -t $'\t'  348.csv 349.csv