Shell-Script
刪除 CSV 文件中的所有行,而另一個 CSV 文件中沒有相應/匹配的時間戳
我有 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 行和第 32019-07-20,12:41:00
行2019-07-20,12:42:00
,在 中不存在具有相同時間戳的對應行file1.csv
。我想在file2.csv
刪除那些特定行的情況下輸出,以便只file1.csv
保留具有匹配時間戳的行。是否可以在命令行中使用簡單的命令來執行此操作?我有一種預感,它可能涉及正則表達式匹配,但我不確定執行此操作的最有效方法。
謝謝!
這是一種方法:
$ 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
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-tools。