유닉스 쉘에서 grep awk 정렬을 많이 사용하여 중간 크기 (약 10M-100M 줄) 탭으로 구분 된 열 텍스트 파일로 작업합니다. 이와 관련하여 유닉스 쉘은 내 스프레드 시트입니다.
그러나 ID 목록이 주어진 레코드를 선택하는 것이 큰 문제입니다.
갖는 table.csv
형식의 파일 id\tfoo\tbar...
및 ids.csv
ID의 목록 파일을 만에서 레코드를 선택 table.csv
의 ID를 사용하는 상태 ids.csv
.
의 종류 /programming/13732295/extract-all-lines-from-text-file-based-on-a-given-list-of-ids 하지만, 쉘,하지 펄.
grep -F
ID가 가변 너비 인 경우 분명히 오 탐지를 생성합니다.
join
내가 알아낼 수없는 유틸리티입니다. 우선, 알파벳순 정렬이 필요합니다 (내 파일은 일반적으로 숫자로 정렬되어 있음). 그러나 잘못된 순서에 대해 불평하고 일부 레코드를 건너 뛰지 않으면 작동하지 않을 수 있습니다. 그래서 나는 그것을 좋아하지 않습니다. ^id\t
ID 수가 많은 경우 -s가있는 파일에 대한 grep -f 는 매우 느립니다.
awk
번거 롭습니다.
이에 대한 좋은 해결책이 있습니까? 탭으로 구분 된 파일을위한 특정 도구가 있습니까? 추가 기능도 가장 환영받을 것입니다.
UPD : 수정 sort
->join
awk
.
sort
모든 종류의 정렬, 숫자, 알파벳 및 기타를 수행 할 수 있습니다. 참조하십시오 man sort
.
grep -f
그 가치보다 더 많은 문제처럼이 전략의 소리를 유지, 너무 느립니다 - 변화 가능성 같은 O (N * M) 성능 문제에 먹이를 떨어질 것이다. 아마 당신의 시간은 정규화 된 SQL DB 를 사용하는 방법을 배우는데 더 나은 시간을 보낼 것입니다 ...