아래와 같이 2개의 CSV 파일이 있습니다.
file1.csv
col1,col2,col3,col4,date,time,col7
1,2,3,4,2019-07-20,12:40:00,0
1,2,3,4,2019-07-20,12:43:00,0
1,2,3,4,2019-07-20,12:44:00,0
1,2,3,4,2019-07-20,12:45:00,0
1,2,3,4,2019-07-20,12:46:00,0
1,2,3,4,2019-07-20,12:47:00,0
file2.csv
date,time,col3
2019-07-20,12:40:00,1
2019-07-20,12:41:00,2
2019-07-20,12:42:00,3
2019-07-20,12:43:00,4
2019-07-20,12:44:00,5
2019-07-20,12:45:00,6
2019-07-20,12:46:00,7
2019-07-20,12:47:00,8
에서 볼 수 있듯이 file2.csv
각각 타임스탬프 및 가 있는 행 2와 3의 경우 2019-07-20,12:41:00
에 2019-07-20,12:42:00
동일한 타임스탬프가 있는 해당 행이 없습니다 file1.csv
. 타임스탬프가 일치하는 행만 남도록 file2.csv
출력에서 특정 행을 제거하고 싶습니다 .file1.csv
명령줄에서 간단한 명령을 사용하여 이 작업을 수행할 수 있습니까? 정규식 일치가 필요할 수도 있다는 예감이 들지만 이를 수행하는 가장 효율적인 방법은 잘 모르겠습니다.
감사합니다!
답변1
한 가지 방법은 다음과 같습니다.
$ awk -F, 'NR==FNR {a[$5 FS $6]; next} ($1 FS $2) in a' file1 file2
date,time,col3
2019-07-20,12:40:00,1
2019-07-20,12:43:00,4
2019-07-20,12:44:00,5
2019-07-20,12:45:00,6
2019-07-20,12:46:00,7
2019-07-20,12:47:00,8
답변2
csv-sqlite -i file1.csv -i file2.csv \
'select * from input2 where date || time in (select date || time from input1) |
csv-header --remove-types'
csv-sqlite의csv-nix-도구.