두 개의 파일이 있습니다.
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 코드의 경우 일부가 필요할 때마다 다시 분할하는 대신 줄을 한 번 분할하고 목록을 여러 번 사용하는 것을 고려할 수 있습니다.