Tente com grep
.
(
export LC_ALL=C
grep -E '^(BL|FR|[GMTW]F|GP|M[CQ]|NC|PM|RE|YT)([^|]*\|){19}TRUE(\||$)' |
cut -d'|' -f1-3,6,10,11,13,19,20
)
Como sugerido por @don_crissti, e supondo que todas as linhas contenham pelo menos 20 campos, você também pode tentar cortar primeiro o que, dependendo do número e comprimentos dos campos em cada linha, e a proporção de linhas correspondentes pode oferecer melhor desempenho :
(
export LC_ALL=C
cut -d'|' -f1-3,6,10,11,13,19,20 |
grep -xE '(BL|FR|[GMTW]F|GP|M[CQ]|NC|PM|RE|YT).*\|TRUE'
)