我有两个文件:
文件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