最初の列から一致する行を抽出しますか? [コピー]

最初の列から一致する行を抽出しますか? [コピー]

2つのファイルがあります。

ファイル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

関連情報