행의 첫 번째 셀과 일치하는 각 행에 대해 파일 1에서 3까지 열을 추가하려면 새 행을 만들고 추가합니다.

행의 첫 번째 셀과 일치하는 각 행에 대해 파일 1에서 3까지 열을 추가하려면 새 행을 만들고 추가합니다.

아래와 같이 4개의 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

[참고: file2 D,E,K의 라인 1에 있는 내용은 D,E,F원하는 출력에 표시된 내용과 다릅니다. ]


4개 파일로 확장하는 것은 쉽습니다.

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'

다루다4개 이상의 파일에는 추가 연결 수준이 필요하며 빠르게 보기 흉해지기 시작합니다. 이 경우에는 이 접근 방식을 권장하지 않습니다.

관련 정보