根据 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

现在我们要在ProcessTypeismpeEditTablesImport.xmlClusterNameis时过滤行PROD

我尝试了以下代码,但它给出了空输出:

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

我不确定我做错了什么,任何帮助都是有用的。

答案1

awk 的工作原理是将行分割成字段,然后由字段引用数字而不是通过字段中的文本。因此,您不要使用$field1第一个字段,而是使用$1and 然后$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

相关内容