Estou escrevendo um script para preparar um arquivo csv que leva as colunas 5, 6, 7, 8, 10 e 13; pega as linhas que na coluna 44 são iguais a 7 e também encontra que as linhas que na coluna 3 são iguais a 1, ao mesmo tempo.
Entrada:
"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"
Saída:
"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"
No momento, no meu script eu tenho:
#!/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}
}
Mas não tenho certeza sobre a última parte. Então, minha pergunta seria: como extrair apenas as linhas que atendem a estas condições: ($44 == 7)
e ($3 == 1)
?
Responder1
Uma nota inicial: nenhuma das 44 células do campo é igual a 7. Você tem 07
.
Isso não é estranho, éMoleiro, acho que pode ser útil
mlr --csv -N filter -S '$3=="1" && $44=="07" || $1=~"ID"' then cut -f 5,6,7,8,10,13 input.csv >outuput.csv
Alguns comentários:
filter
filtrar usando suas condições e ter como saída a linha do título;cut
para extrair os campos que você deseja
Na saída você terá
Codi_Sector_Activitat | Nome_Setor_Atividade | Codi_Grup_Activitat | Nome_Grup_Activitat | Nome_Atividade | SN_Oci_Nocturn |
---|---|---|---|---|---|
2 | Serveis | 14 | Restaurantes, bares e hotéis (incluindo pousadas, pensões e fundos) | Restaurantes | 1 |
Responder2
Você pode agrupar todas as condições em uma regra padrão - observe, entretanto, que como todos os seus campos CSV estão entre aspas, você precisa levar isso em consideração no padrão ex.
$ cat prepare.awk
#!/bin/awk -f
BEGIN { FS = OFS = "," }
NR == 1 || $44 == "\"7\"" || $3 == "\"1\"" {
print $5, $6, $7, $8, $10, $13
}
Então
$ ./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"
Observe que todas as linhas que não são de cabeçalho em sua entrada de amostra estão "1"
na terceira coluna.
Se você quiser selecionar linhas ondeambosas condições sem cabeçalho correspondem, altere a condição para
NR == 1 || ( $44 == "\"7\"" && $3 == "\"1\"" )