我有四个 CSV 文件,如下所示;我想为该行的第一个单元格匹配的每一行添加从文件 1 到 3 的列,然后创建一个新行,然后追加。
文件1:
N,Mon,Tue,Wed
1,A,B,C
2,D,E,F
3,I,J,X
文件2:
N,Mon,Tue,Wed
3,D,E,F
5,O,P,q
1,D,E,K
文件3
N,Mon,Tue,Wed
2,B,E,J
6,L,D,O
3,I,J,B
我的输出应该如下
N, Mon, Tue, Wed, Mon, Tue, Wed, Mon, Tue, Wed
1, A, B, C, D, E, F , , ,
2, D, E, F, , , , B, E, J
3, I, J, K, D, E, F, I, J, B
5, , , , O, P, q, , ,
6, , , , , , , L, D, O
Client Name,Monday 08/18,Tuesday 08/19,Wednesday 08/20,Thursday 08/21,Friday 08/22,Saturday 08/23,Sunday 08/24,Monday 08/25
ns2.advancemags.com->/var,Successful Full FS_UNIX_Mon_B Synthetic_Full 0B; ,,,,,,,Successful Full FS_UNIX_Mon_B Synthetic_Full 0B;
ns2.advancemags.com->/usr,Successful Full FS_UNIX_Mon_B Synthetic_Full 0B; ,,,,,,,Successful Full FS_UNIX_Mon_B Synthetic_Full 0B;
ns2.advancemags.com->/,Successful Full FS_UNIX_Mon_B Synthetic_Full 0B; ,,,,,,,Successful Full FS_UNIX_Mon_B Synthetic_Full 0B;
ns2.advancemags.com->/boot,Successful Full FS_UNIX_Mon_B Synthetic_Full 0B; ,,,,,,,Successful Full FS_UNIX_Mon_B Synthetic_Full 0B;
ns3.advancemags.com->/boot,,Successful Full FS_UNIX_Tue_C Synthetic_Full 0B; ,,,,,,
ns3.advancemags.com->/,,Successful Full FS_UNIX_Tue_C Synthetic_Full 0B; ,,,,,,
ns3.advancemags.com->/usr,,Successful Full FS_UNIX_Tue_C Synthetic_Full 0B; ,,,,,,
答案1
在bash中,定义一个函数
function hsort {
head -n +1 "$1" ; sort <(tail -n +2 "$1");
}
然后
join -a1 -a2 -t, -o0,1.2,1.3,1.4,1.5,1.6,1.7,2.2,2.3,2.4 \
<(join -a1 -a2 -t, -o0,1.2,1.3,1.4,2.2,2.3,2.4 <(hsort file1) <(hsort file2)) \
<(hsort file3) | sed 's/,/, /g'
给予
N, Mon, Tue, Wed, Mon, Tue, Wed, Mon, Tue, Wed
1, A, B, C, D, E, K, , ,
2, D, E, F, , , , B, E, J
3, I, J, X, D, E, F, I, J, B
5, , , , O, P, q, , ,
6, , , , , , , L, D, O
[注意:您的 file2D,E,K
第 1 行中的内容D,E,F
与所需输出中所示的不同。]
扩展到四个文件很简单
join -a1 -a2 -t, -o0,1.2,1.3,1.4,1.5,1.6,1.7,2.2,2.3,2.4,2.5,2.6,2.7 \
<(join -a1 -a2 -t, -o0,1.2,1.3,1.4,2.2,2.3,2.4 <(hsort file1) <(hsort file2)) \
<(join -a1 -a2 -t, -o0,1.2,1.3,1.4,2.2,2.3,2.4 <(hsort file3) <(hsort file4)) |
sed 's/,/, /g'
处理更多的超过四个文件将需要额外的连接级别,并且很快就会开始看起来很难看 - 在这种情况下我不会推荐这种方法。