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