Primeiro de tudo, não há necessidade do comando cat no começo. Você pode redirecionar a saída do arquivo para o awk, usando "< x.txt" no final da linha de comando. Melhor ainda, o awk pode pegar o nome do arquivo que você quer que seja processado como argumento. Então eu acho que você quer algo assim:
awk -F"|" '{
printf "%s", $1;
for (i=2; i<=NF; i++) {
if (match($i, /\[(.*?)>/)) {
printf " %s", substr($i,RSTART,RLENGTH);
}};
printf "\n"
}' x.txt
Para cada linha no arquivo, isso imprime o primeiro campo, seguido por todas as correspondências de expressão regular encontradas em cada um dos campos restantes (se houver). Os campos de saída são separados por espaços; isso pode ser alterado editando o espaço inicial no segundo comando printf.