Saltar al contenido

¿Cómo pasar variables al comando awk con condiciones?

Solución:

Tiene dos opciones básicas: i) usar -v pasar la variable a awk o ii) cerrar el ' alrededor de awk script, use la variable de shell y continúe el ' de nuevo.

  1. Usar -v

    while read city
    do
        awk -v city="$city" -F, '{
                                  if ( $1 == "ACTIVE"  && $2 == city ){print $1}
                                 }' siteDBName >> count
    done < city_name
    
  2. Cerrar la cotización

    while read city
    do
        awk  -F, '{
                     if ( $1 == "ACTIVE"  && $2 == "'$city'" ){print $1}
                  }' siteDBName >> count
    done < city_name
    

Quité el SUM= línea ya que no estaba haciendo nada útil dado que $1 es ACTIVE así que agregarlo no tiene sentido. Vea mi enfoque alternativo a continuación para ver una forma de hacer esto correctamente.

Además, tenga en cuenta que con este enfoque, debe leer el siteDBName archivar varias veces. Una versión más eficiente sería:

$ awk -F, '{
             if(NR==FNR){cities[$1]++;}
             else if($1=="ACTIVE" && $2 in cities ){sum++}
            } END{print sum,"active cities"}' city_name siteDBName 
3 active cities

Tal como indicaron @cuonglm y @YoMismo, está utilizando la variable incorrecta y la forma incorrecta de hacer referencia a ella. Debería ser algo como:

while read city
do
        awk -v c="$city" -F, '{
                        if ( $1 == "ACTIVE"  && $2 == c )
                        print $1
                }' siteDBName >> count
        SUM=`awk '{ sum += $1 } END { print sum }' count`

done < city_name
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *