5, 6, 7, 8, 10, 13열을 사용하는 csv 파일을 준비하는 스크립트를 작성 중입니다. 44열의 행은 7과 같고 3열의 행은 1입니다.
입력하다:
"ID_Bcn_2019","ID_Bcn_2016","Codi_Principal_Activitat","Nom_Principal_Activitat","Codi_Sector_Activitat","Nom_Sector_Activitat","Codi_Grup_Activitat","Nom_Grup_Activitat","Codi_Activitat_2019","Nom_Activitat","Codi_Activitat_2016","Nom_Local","SN_Oci_Nocturn","SN_Coworking","SN_Servei_Degustacio","SN_Obert24h","SN_Mixtura","SN_Carrer","SN_Mercat","Nom_Mercat","SN_Galeria","Nom_Galeria","SN_CComercial","Nom_CComercial","SN_Eix","Nom_Eix","X_UTM_ETRS89","Y_UTM_ETRS89","Latitud","Longitud","Direccio_Unica","Codi_Via","Nom_Via","Planta","Porta","Num_Policia_Inicial","Lletra_Inicial","Num_Policia_Final","Lletra_Final","Solar","Codi_Parcela","Codi_Illa","Seccio_Censal","Codi_Barri","Nom_Barri","Codi_Districte","Nom_Districte","Referencia_cadastral","Data_Revisio"
1059038,"68849","1","Actiu","2","Serveis","14","Restaurants, bars i hotels (Inclòs hostals, pensions i fondes)","1400002","Restaurants","1400002","QUATRE COSES","1","1","1","1","1","0","1","","1","","1","","0","Rambla Catalunya","430088.542","4582365.352","41.38978196","2.16378361","089004, 329-329, LOC 10","089004","CONSELL DE CENT","LOC","10","329","","329","","114142","019","60490","079","07","la Dreta de l'Eixample","02","Eixample","0125419DF3802E","20190509"
1075454,"","1","Actiu","2","Serveis","16","Altres","1600400","Serveis a les empreses i oficines","16004","SORIGUE","1","1","1","1","1","0","1","","1","","1","","1","","427229.272","4577543.637","41.34610100","2.13016600","222206, 19-19, LOC 10","222206","MOTORS","LOC","10","19","","19","","","","","025","12","la Marina del Prat Vermell","03","Sants-Montjuïc","","20190925"
1075453,"","1","Actiu","2","Serveis","16","Altres","1600102","Activitats emmagatzematge","1600102","CEJIDOS SIVILA S.A","1","1","1","1","1","0","1","","1","","1","","1","","427178.393","4577526.160","41.34593900","2.12956000","222206, 278-282, LOC 10","222206","MOTORS","LOC","10","278","","282","","","","","025","12","la Marina del Prat Vermell","03","Sants-Montjuïc","","20190925"
산출:
"Codi_Sector_Activitat","Nom_Sector_Activitat","Codi_Grup_Activitat","Nom_Grup_Activitat","Nom_Activitat","SN_Oci_Nocturn"
"2","Serveis","14","Restaurants, bars i hotels (Inclòs hostals, pensions i fondes)","Restaurants","1"
현재 내 스크립트에는 다음이 있습니다.
#!/bin/awk -f
BEGIN { FS = OFS = "," }
NR == 1 { print $5, $6, $7, $8, $10, $13 }
NR != 1 {
if ($44 == 7) {print}
if ($3 == 1) {print}
}
하지만 마지막 부분은 잘 모르겠습니다. 그래서 내 질문은 ($44 == 7)
다음 조건을 만족하는 행만 추출하려면 어떻게 해야 합니까 ($3 == 1)
?
답변1
우선, 44개의 필드 셀 중 어느 것도 7과 같지 않습니다. 당신은 07
.
이건 별거 아니지만밀러, 내 생각엔 이게 유용할 것 같아
mlr --csv -N filter -S '$3=="1" && $44=="07" || $1=~"ID"' then cut -f 5,6,7,8,10,13 input.csv >outuput.csv
일부 의견:
filter
기준을 사용하여 필터링하고 출력에 헤더 행을 포함합니다.cut
원하는 필드를 추출하세요.
출력에서 당신은
Codi_Sector_Activitat | Nom_Sector_Activitat | Codi_Grup_Activitat | Nom_Grup_Activitat | Nom_Activitat | SN_Oci_녹턴 |
---|---|---|---|---|---|
2 | 제공하다 | 14 | 레스토랑, 바, 호텔(호텔, 펜션, 호텔 포함) | 식당 | 1 |
답변2
모든 조건을 하나의 패턴 규칙으로 결합할 수 있습니다. 하지만 CSV 필드가 모두 참조되므로 패턴에서 이를 고려해야 합니다.
$ cat prepare.awk
#!/bin/awk -f
BEGIN { FS = OFS = "," }
NR == 1 || $44 == "\"7\"" || $3 == "\"1\"" {
print $5, $6, $7, $8, $10, $13
}
그 다음에
$ ./prepare.awk Input
"Codi_Sector_Activitat","Nom_Sector_Activitat","Codi_Grup_Activitat","Nom_Grup_Activitat","Nom_Activitat","SN_Oci_Nocturn"
"2","Serveis","14","Restaurants, pensions i fondes)","1400002"
"2","Serveis","16","Altres","Serveis a les empreses i oficines","1"
"2","Serveis","16","Altres","Activitats emmagatzematge","1"
예제 입력에서 헤더가 아닌 모든 행은 "1"
세 번째 열에 있습니다.
행을 선택하고 싶다면둘 다헤더가 아닌 조건이 일치합니다. 조건을 다음으로 변경하세요.
NR == 1 || ( $44 == "\"7\"" && $3 == "\"1\"" )