Extraindo linhas que coincidem na primeira coluna? [duplicado]

0

Eu tenho dois arquivos:

arquivo 1:

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

arquivo2:

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

Eu quero refinar os arquivos. Eu só preciso das linhas onde a primeira coluna em file1 coincide em file2 .

O novo arquivo1 deve conter:

a,txt1,v1
b,txt2,v2

Da mesma forma, file2 deve ser refinado para conter apenas as linhas nas quais há uma correspondência na primeira coluna com file1 . Então file2 deve ser:

a,txt5,v2
b,txt6,v1
    
por user9371654 14.07.2018 / 04:28

1 resposta

0

Aqui está um script Bash que deve fazer o que você quer:

#!/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}"

Você executaria assim:

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

E aqui está um script Python que faz essencialmente a mesma coisa:

#!/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
    
por 14.07.2018 / 04:53