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.
-
Usar
-v
while read city do awk -v city="$city" -F, '{ if ( $1 == "ACTIVE" && $2 == city ){print $1} }' siteDBName >> count done < city_name
-
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)