提取第一列中匹配的行?

提取第一列中匹配的行?

我有两个文件:

文件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

相关内容