파일의 단일 열을 다른 파일과 비교

파일의 단일 열을 다른 파일과 비교

두 개의 파일이 있습니다.

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
....

그리고

aaaa
aaac
aaae
....

첫 번째 파일의 첫 번째 열을 두 번째 파일과 비교하고 해당 요소가 두 번째 파일에 있는 경우 첫 번째 파일의 각 행을 별도의 파일에 써야 합니다. Python에서 이 작업을 수행하는 스크립트가 있지만 매우 비효율적입니다. 터미널에서 이 작업을 수행할 수 있습니까?

편집하다:

python 스크립트: LABEL_FILE이 첫 번째 예가 될 것이며, 다른 "파일" 목록은 폴더에 있는 파일의 현재 이미지 목록입니다.

 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]])

답변1

이러한 파일의 경우 다음과 같이 grep을 사용할 수 있습니다.

grep -wf file2 file1

하지만 dos2unix끝에 문자가 있으므로 먼저 file2가 필요합니다.\r

그러면 전체 단어가 일치하고 -w파일에서 패턴을 읽습니다 -f. 이는 실제로 줄의 어느 위치에서나 패턴과 일치하지만 제공한 예제 입력을 기반으로 하면 작업을 수행해야 합니다.

Python 코드의 경우 일부가 필요할 때마다 다시 분할하는 대신 줄을 한 번 분할하고 목록을 여러 번 사용하는 것을 고려할 수 있습니다.

관련 정보