2列の値に基づく大容量csvファイルの行フィルタリング

2列の値に基づく大容量csvファイルの行フィルタリング

次の.csvファイルがあります。

RepDate;FOO1;ProcessId;ClusterName;ProcessType
19700101;-1;Job_1000969943637142044;PROD;auswertung.mpeTestPlayer.xml
20181231;root;Job_107953405843118835;PROD;mpeEditTablesImport.xml

ProcessTypeそれでは、ismpeEditTablesImport.xmlClusterNameisの行をフィルタリングしたいと思いますPROD

次のコードを試しましたが、空の出力が提供されます。

awk -F "," '{ if(($ProcessType == "mpeEditTablesImport.xml") && ($ClusterName ==  "PROD")) { print } }' OutputFile.csv > OutputFile_Filtered.csv | tail

何が間違っているのかわかりません。どんな助けでも役に立ちます。

ベストアンサー1

awkは行をフィールドに分割し、フィールドが参照する方法で機能します。数字フィールドのテキストを通してではありません。したがって、$field1最初のフィールドを使用する代わりに、2番目のフィールドにおよびなどを使用$1します$2。あなたが望むもの:

$ awk -F';' '$5=="mpeEditTablesImport.xml" && $4=="PROD"'  file
20181231;root;Job_107953405843118835;PROD;mpeEditTablesImport.xml

この場合、単に以下を使用することもできますgrep

$ grep ';PROD;mpeEditTablesImport.xml$' file
20181231;root;Job_107953405843118835;PROD;mpeEditTablesImport.xml

おすすめ記事