他のCSVファイルに対応/一致するタイムスタンプを持たないCSVファイルのすべての行を削除します。

他の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と3の場合は、2019-07-20,12:41:00同じ2019-07-20,12:42:00タイムスタンプを持つ行はありませんfile1.csv。タイムスタンプが一致する行だけを残すように、出力から特定のfile2.csv行を削除したいと思います。file1.csv

コマンドラインで単純なコマンドを使用してこれを実行できますか?正規表現のマッチングが必要かもしれないという予感がありますが、これを行う最も効率的な方法はよくわかりません。

ありがとうございます!

ベストアンサー1

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

おすすめ記事