Bash

根據 2 列中的值過濾巨大 csv 文件的行

  • May 19, 2022

我有一個 .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

我不確定我做錯了什麼,任何幫助都是有用的。

awk 通過將行拆分為欄位來工作,然後由欄位編號而不是欄位中的文本引用這些欄位。因此,您不使用$field1第一個欄位,而是使用$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

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