awk를 사용하여 키 열을 사용하여 두 개의 CSV를 연결하고 다른 CSV에 쓰는 방법

awk를 사용하여 키 열을 사용하여 두 개의 CSV를 연결하고 다른 CSV에 쓰는 방법

다음 데이터가 포함된 두 개의 CSV가 있습니다.

파일 1.csv:-

path(S1),filename,timestamp(S1),memory(S1)  
xx/APS50CC2,APS50CC2,23-09-2019,45  
yy/APS50CC3,APS50CC3,18-09-2019,25

파일 2.csv:-

path(S2),filename,timestamp(S2),memory(S2)
mm/APS03CR1,APS03CR1,23-09-2019,200
zz/APS50CC2,APS50CC2,18-09-2019,55

예상 출력 출력
.csv:-

filename,path(S1),timestamp(S1),memory(S1),path(S2),timestamp(S2),memory(S2)
APS50CC2,xx/APS50CC2,23-09-2019,45,zz/APS50CC2,18-09-2019,55
APS50CC3,yy/APS50CC3,18-09-2019,25,Not found,Not found,Not found
APS03CR1,Not found,Not found,Not found,mm/APS03CR1,23-09-2019,200

join명령을 시도하고 실행 했는데 더 작은 입력 세트에서는 잘 작동합니다. 하지만 500,000개 이상의 레코드를 실행하면 오류가 발생하므로 사용하고 싶지 않습니다 . join사용해 보고 싶습니다 awk.

저는 이것에 조금 익숙합니다 awk. 구문을 도와주세요. 여기서 조인하는 핵심은 2열, 즉 입니다 filename.

답변1

밀러 사용(https://github.com/johnkerl/miller) 그리고 실행

mlr --csv join --ul --ur -j filename -f file1.csv \
then unsparsify --fill-with "Not found" \
then reorder -f "filename","path(S1)","timestamp(S1)","memory(S1)","path(S2)","timestamp(S2)","memory(S2)" file2.csv

당신은 할 것

+----------+-------------+---------------+-------------+---------------+------------+--------------+
| filename | path(S1)    | timestamp(S1) | path(S2)    | timestamp(S2) | memory(S2) | memory(S1)   |
+----------+-------------+---------------+-------------+---------------+------------+--------------+
| APS03CR1 | Not found   | Not found     | mm/APS03CR1 | 23-09-2019    | 200        | Not found    |
| APS50CC2 | xx/APS50CC2 | 23-09-2019    | zz/APS50CC2 | 18-09-2019    | 55         | 45           |
| APS50CC3 | yy/APS50CC3 | 18-09-2019    | Not found   | Not found     | Not found  | 25           |
+----------+-------------+---------------+-------------+---------------+------------+--------------+

이상한 것은 아니지만 Miller는 또 다른 훌륭한 구조화된 텍스트 도구입니다.

관련 정보