ヘッダーなしで次のように区切られたCSVがあります。
epochtime,#value,#value,property=1.property=2.property=3
個々の属性はピリオドで区切られますが、csvの単一の列に含まれています。
特定の属性をフィルタリングするために、属性リストを含むブラックリストを実行しようとしています。以下でこの grep 関数を使用しています。
grep -vFf blacklist.txt file.csv > newfile.csv
ただし、結果は返されません。他の値とエポック時間を排除すると、これらのエポックが問題ではない可能性があるという疑問を持たせるのは完全に機能します。
他の2つの列を無視して正しい結果を返す方法はありますか?
よろしくお願いします。私はUnixに初めて触れました。 awkコマンドはより適切ですか?
ベストアンサー1
誰もが検索で回答を見つけてこの記事を偶然見つけたら。私は小さなPythonスクリプトを書いた。
import csv
import os
blacklist_dict = {}
with open("blacklist.txt", 'r') as blacklist:
for line in blacklist:
line = line.strip('\n')
blacklist_dict[line] = 0
blacklist.close()
with open('filename.csv', "r") as source_file, open('newfile.csv', "w") as target_file:
reader = csv.reader(source_file)
writer = csv.writer(target_file)
for row in reader:
if row[2] not in blacklist_dict:
writer.writerows([row])