Eu acho que o que você quer é
$ awk -F, 'BEGIN{ORS=",";printf "food: "}
/cherries/{print $(NF-1); matches++;};
END{printf "\ncherries appeared "matches "/" NR " times\n"}' file
food: berries,guacamole,
cherries appeared 2/7 times
Note que o seu arquivo tem espaço duplo, então o número de linhas inclui as linhas em branco. Para evitar isso, use
$ awk -F, 'BEGIN{ORS=",";printf "food: "}
/./{k++}
/cherries/{print $(NF-1); matches++;};
END{printf "\ncherries appeared matches /" k " times\n"}' file
food: berries,guacamole,
cherries appeared matches /4 times
-F ","
é equivalente a FS=","
. ORS
é o separador de registro de saída que também é definido como ,
para facilitar a impressão. A desvantagem é que ele adiciona um ,
extra no final da linha food:
, mas você pode removê-lo passando por | sed 's/,$//'
. Seu principal problema foi que a impressão do awk imprime tudo o que você der, seguido pelo valor de ORS
, que é uma nova linha por padrão.
Eu não entendo o que você quer dizer com cherries
sendo o penúltimo campo, já que esse nunca é o caso em seu exemplo.