Shell-Script

刪除 CSV 文件中的所有行,而另一個 CSV 文件中沒有相應/匹配的時間戳

  • January 9, 2021

我有 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:002019-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

引用自:https://unix.stackexchange.com/questions/621627