awk -v RS="[, ]" '/free/{print a}{a=$0}'
Explicação
- Defina o separador de registro como
,
espace
, de modo que o número que precede cada string seja um registro em si, assim como a string. - Tendo tudo como seu próprio registro, o awk processará cada item um por um
- Para todos os registros anteriores a
free
, ele ignorará o{print a}
porque a condição não corresponde e ele pulará para{a=$0}
, que armazenará o registro atualmente processado na variávela
- Quando o
/free/
for correspondido, o awk será apenas{print a}
, em quea
conterá o registro logo antes da correspondência