Com base em sua entrada de exemplo, que eu coloquei em um arquivo chamado test.in, o seguinte comando awk deve fornecer a saída desejada.
awk -F\& '{for (i=1; i<+NF; i++) {if ($i ~ /^ACCT=/) {acct=$i; sub(/^ACCT=/, "", acct)} if ($i ~ /^EX=/) {ex=$i; sub(/^EX=/, "", ex); sub(/^[0-9][0-9]/, "&/", ex)} if ($i ~ /^SERIAL=/) {serial=$i; sub(/^SERIAL=/, "", serial)}} printf("%s,%s,%s\n", acct, ex, serial)}' test.in
O que isto faz é tratar o & como um separador de campo. Em seguida, ele processa cada campo em uma determinada linha, verificando se esse campo inicia com ACCT =, EX = ou SERIAL =. Se esse campo for encontrado, esse campo será atribuído à variável apropriada. O subcomando é então usado para remover o início dessa variável. Isso apenas fornece o valor associado a essa chave.
Como você precisa de uma barra (/) após os dois primeiros dígitos da chave EX, esse é o outro sub para EX. O "e" comercial (&) é uma referência de retorno que identifica esses dois primeiros dígitos.
Quando todos os campos tiverem sido processados, serão impressos os valores encontrados nessa linha.
Espero que isso ajude.