다음 형식의 파일 1을 포함하는 큰 csv 파일이 있습니다.
id,ICD,CT
16214497,008.8,1
16227244,401.1,45
27154870,780.79,1
ID(제목 ID) 목록이 있는 또 다른 txt 파일이 있습니다. 파일 2:
id
16214497
27154870
파일 2의 ID 목록으로 데이터가 제한된 다른 파일을 원합니다.
결과물 파일:
id,ICD,CT
16214497,008.8,1
27154870,780.79,1
답변1
파일에 동일한 순서로 공통 줄이 있는 경우
join -t, -j1 file1.txt file2.txt
설명하다
자세한 내용은 을 참조하세요 man join
. 기본적으로 join
이 두 파일은 "페어링할 수 없는 줄"을 건너뜁니다. 구분 기호는 쉼표 -t,
이며 필드 1에서 연결됩니다 -j1
.
답변2
csvjoin
Python 기반 사용csvkit
$ csvjoin -Ic id file\ 1 file\ 2
id,ICD,CT
16214497,008.8,1
27154870,780.79,1
이 -I
플래그는 유형 추론을 비활성화하여 해당 필드가 008.8
숫자가 아닌 문자열로 처리되도록 합니다(이로 인해 형식이 다시 지정될 수 있음). 이 방법은 DOS/Windows 스타일 줄 끝을 투명하게 처리하는 것으로 보입니다.
awk를 사용한 대체 빠른 연결:
awk -F, 'NR==FNR {a[$1]; next} $1 in a' file\ 2 file\ 1
파일에 DOS/Windows 줄 끝(일반 LF 대신 CRLF)이 있는 경우 다음을 시도해 볼 수 있습니다.
awk -vRS='\r\n' -F, 'NR==FNR {a[$1]; next} $1 in a' file\ 2 file\ 1
dos2unix
아니면 먼저 파일을 변환하는 등의 방법을 사용하세요 tr
.sed
답변3
그리고 :grep
sed
^
file2의 각 줄 시작 부분에 a를 추가 하고 ,
file2의 각 줄 끝에 a를 추가한 후 다음을 사용할 수 있습니다 grep
.
grep -f <(sed 's/^/^/;s/$/,/' file2) file1
-f
파일에서 패턴을 읽는 옵션 입니다(이 경우 실제 파일이 아니라 프로세스 대체에서 <(…)
).