Comparando coluna única de um arquivo com outro

3

Eu tenho dois arquivos:

aaaa 11 0.4 12 0.2
aaab 40 0.1 99 0.2 69 0.3
aaac 222 0.5 21 0.3
aaad 2 0.1
aaae 33 0.3
....

e

aaaa
aaac
aaae
....

Eu preciso comparar a primeira coluna do primeiro arquivo com o segundo arquivo e se um elemento estiver presente no segundo arquivo, escreva cada linha do primeiro arquivo em um arquivo separado. Eu tenho um script que faz isso em python, mas é extremamente ineficiente. É possível fazer isso de um terminal?

EDITAR:

script python: LABEL_FILE seria o primeiro exemplo e outro 'arquivo' - list is present_images-list de arquivos em uma pasta.

 f = open(LABEL_FILE, 'r')
 present_images = iter(os.listdir(os.path.join(IMAGES_PATH, dataset)))

 templab = f.readlines()
 num_info = len(templab)
 image_ids = []
 labels = [] 
 labels_ind = [] 
 for line in templab:
     if len(line[:-1].split(' ')) != 1:
         if (line[:-1].split(' ')[0] in present_images):
             image_ids.append(os.path.join(IMAGES_PATH, dataset, line[:-1].split(' ')[0]))
             line = line[:-1].split(' ')[1:]
             labels_ind.append([int(i) for i in line[::2]])
             labels.append([float(j) for j in line[1::2]])
    
por jojo 14.12.2016 / 17:12

1 resposta

2

Com esses arquivos, você pode usar o grep como:

grep -wf file2 file1

embora você precise dos2unix file2 primeiro, pois tem \r caracteres no final.

Isso corresponderá palavras inteiras com -w e lerá os padrões do arquivo com -f . Isso realmente combinaria com os padrões em qualquer lugar da linha, mas com a entrada de amostra que você nos deu, ele deve fazer o trabalho.

Quanto ao seu código python, você pode considerar dividir a linha uma vez e usar essa lista várias vezes, em vez de dividi-la novamente toda vez que quiser uma parte dela

    
por 14.12.2016 / 17:27