Outro trabalho típico para o awk:
POSIXLY_CORRECT=1 LC_ALL=C awk '
$1 ~ /^[A-Z]{3}$/ {
if ($1 == "CSI")
file = "csi.txt"
else
file = "rest.txt"
}
file {print > file}'
POSIXLY_CORRECT é apenas no caso de seu awk ser o GNU awk que não reconhece o {...} a menos que esteja no modo de conformidade padrão.
LC_ALL=C é garantir que [A-Z] signifique o caractere ASCII de A a Z , caso contrário, esse intervalo pode incluir outros caracteres, dependendo das configurações de localização.
Se estiver no Solaris, use command -p awk ou /usr/xpg4/bin/awk , caso contrário, você pode acabar com /bin/awk , que não deve mais ser usado.