我正在尝试合并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
并按顺序。
提前致谢
答案 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