첫 번째 열에서 일치하는 행을 추출하시겠습니까? [복사]

첫 번째 열에서 일치하는 행을 추출하시겠습니까? [복사]

두 개의 파일이 있습니다.

파일 1:

a,txt1,v1
b,txt2,v2
c,txt3,v1
d,txt4,v2

파일 2:

a,txt5,v2
b,txt6,v1
xc,txt7,v1
xd,txt8,v2

문서를 완성하고 싶습니다. 첫 번째 열과 file1일치하는 행만 필요합니다 file2.

새 file1에는 다음이 포함되어야 합니다.

a,txt1,v1
b,txt2,v2

다시 말하지만, file2첫 번째 열과 일치하는 행만 포함하도록 재정의해야 합니다 file1. 따라서 file2는 다음과 같아야 합니다.

a,txt5,v2
b,txt6,v1

답변1

원하는 작업을 수행하는 Bash 스크립트는 다음과 같습니다.

#!/bin/bash
# match.sh

file1="$1"
file2="$2"

while read line; do
    column="$(echo "${line}" | cut -d, -f1)"
    if grep -Pq "^${column}," "${file2}"; then
        echo "${line}"
    fi
done < "${file1}"

다음과 같이 실행할 수 있습니다.

user@host:~$ bash match.sh file1 file2
a,txt1,v1
b,txt2,v2

user@host:~$ bash match.sh file2 file1

a,txt5,v2
b,txt6,v1

기본적으로 동일한 작업을 수행하는 Python 스크립트는 다음과 같습니다.

#!/usr/bin/env python
"""match.py"""

import sys
import csv

with open(sys.argv[1], 'r') as file1:
    reader1 = csv.reader(file1)
    for row1 in reader1:
        with open(sys.argv[2], 'r') as file2:
            reader2 = csv.reader(file2)
            for row2 in reader2:
                if row1[0] == row2[0]:
                    print(','.join(row1))
                    break

관련 정보