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이제 is mpeEditTablesImport.xmlClusterNameis 에 대한 행을 필터링하려고 합니다 PROD.

다음 코드를 시도했지만 빈 출력이 제공됩니다.

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

내가 뭘 잘못하고 있는지 잘 모르겠습니다. 어떤 도움이라도 도움이 될 것입니다.

답변1

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

관련 정보