Bash에서 쉼표로 구분된 두 개의 텍스트 파일을 연결합니다.

Bash에서 쉼표로 구분된 두 개의 텍스트 파일을 연결합니다.

파일 1:

Doe, John, phone123
Dane, Jane, phone124

파일 2

phone123, longdistance, 10mins
phone124, local, 5mins
phone124, longdistance, 6mins

산출

Doe, John phone123 longdistance 10mins
Dane, Jane phone124 local 5mins
Dane, Jane phone124 longdistance 6mins

지금까지 나는

join -1 1 -2 3 -o 2.1,2.2,1.1,1.2,1.3 file2.txt file1.txt > output.txt

파일 1과 2를 "" 없이 공백으로만 구분하면 작동하지만 파일에 쉼표를 넣으면 공백이 출력됩니다.

답변1

실제 문제는 2문자 필드 구분 기호입니다. 조인 및 정렬과 같은 도구에서는 구분 기호가 단 한 문자일 것으로 예상합니다.

join -t, -13 -21 -o 1.1,1.2,1.3,2.2,2.3 \
  <(sed -E 's/, +/,/g' file1.txt | sort -t, -k3,3) \
  <(sed -E 's/, +/,/g' file2.txt | sort -t, -k1,1)

산출

Doe,John,phone123,longdistance,10mins
Dane,Jane,phone124,local,5mins
Dane,Jane,phone124,longdistance,6mins

| sed 's/,/, /g'"쉼표 공백" 구분 기호를 복원하기 위해 이를 파이프할 수 있습니다 .


번갈아,

awk '
    BEGIN {FS = ", *"; OFS = ", "}
    NR == FNR {name[$3] = $1 OFS $2; next}
    $1 in name {print name[$1], $0}
' file1.txt file2.txt

관련 정보