Bash에서 레코드 일치 및 병합

Bash에서 레코드 일치 및 병합

두 개의 csv 파일을 고려하십시오.

$ cat given.csv
123,John
246,Paul
369,George
987,Ringo

$ cat family.csv
246,McCartney
123,Lennon
987,Starr
369,Harrison

이 줄은 순서가 아니라는 점에 유의하세요!및 기타 awk도구 를 사용하여 결합된 출력 파일을 가져오는 방법 (순서는 중요하지 않음):grepbash

123,John,Lennon
246,Paul,McCartney
369,George,Harrison
987,Ringo,Starr

첫 번째 파일에서 루프를 실행 한 for다음 이를 사용하여 awkID를 얻고그 다음에두 번째 파일의 관련 레코드를 grep합니다.Bash에서 이 작업을 수행하는 더 직접적인 방법이 있습니까?? 나는 bash가 종종스마트하고 효과적인 방법아직 익숙하지 않은 텍스트 파일 작업.

답변1

연결 및 정렬:

join -t , <(sort given.csv) <(sort family.csv)

산출:

123. 존 레논
246. 폴 매카트니
369. 조지 해리슨
987 화 링고 스타


grep을 사용하세요:

#!/bin/bash

F1="given.csv"
F2="family.csv"
D=","           # delimiter

while IFS="$D" read FIRST_COLUMN REST; do
  T="$FIRST_COLUMN$D$REST"
  T+="$(grep -oP "^$FIRST_COLUMN\K$D.*" "$F2")" && echo "$T"
done < "$F1"

산출:

123. 존 레논
246. 폴 매카트니
369. 조지 해리슨
987 화 링고 스타

관련 정보