내 Mac에는 두 개의 파일이 있습니다.
file1.csv
(약 4000줄)
1234,yxds
4352,fsfk
8765,fdgj
7874,hffe
9038,fjro
8297,fhjs
그리고 file2.csv
(약 50줄)
1234,"number","date","OS"
4352,"number","date","OS"
8765,"number","date","OS"
8297,"number","date","OS"
파일 3은 다음과 같아야 합니다.
1234,yxds
4352,fsfk
8765,fdgj
8297,fhjs
file2.csv
그래서 나는 열 2에 존재하는 항목만 원합니다.file1.csv
file1.csv
본질적으로 나는 다른 스크립트와 비교하는 스크립트를 작성하고 싶습니다.file3.csv
나는 지금까지 성공 join
하지 못했습니다 awk
. 지금까지 시도한 내용은 다음과 같습니다.
join -t, -12 -o 1.1,2.1,2.2 file1.csv file2.csv > file 3.csv
그리고
awk 'NR==FNR{a[$1]=$2;next}{if ($1 in a && a[$1] != $2)print;}' FS="|" file1.csv file2.csv > file3.csv
답변1
join
정렬 에 사용되는 파일:
join -o 1.1,1.2 <(sort file1.csv) <(sort file2.csv) > file3.csv
-o 1.1,1.2
출력을file1.field1
나타내고file1.field2
산출:
1234 yxds
4352 fsfk
8297 fhjs
8765 fdgj
답변2
필수 콘텐츠로 f1 및 f2 파일 2개를 생성하고 다음 명령을 실행합니다( 8297
출력에 포함하려는 경우 작동함).
sort -k1 f1 > ff1
sort -k1 f2 > ff2
join ff1 ff2 | cut -d ' ' -f1 > t1.txt
join ff1 ff2 | cut -d ' ' -f2 > t2.txt
paste t1.txt t2.txt > finaloutput.out
rm f1 f2 ff1 ff2
Finaloutput.out에는 원하는 출력이 포함됩니다.
답변3
밀러 사용(https://github.com/johnkerl/miller)
mlr --nidx join -j 1 --lp 2 -f input_01.csv then unsparsify then cut -f 1,22 input_02.csv
당신은 할 것
1234 yxds
4352 fsfk
8765 fdgj
8297 fhjs
답변4
검색어(file2.csv의 첫 번째 열)를 검색 패턴 파일로 grep에 전송합니다.
$ awk '{print $1}' file2.csv | grep -f - file1.csv
1234 yxds
4352 fsfk
8765 fdgj
8297 fhjs