Split email address from existing field into new field without changing original field

I have a working grok filter for a log file just like I want it. Currently the full email is currently parsed into a single field I call "user". I do not want to split this in the original grok unless I have to. I would like to strip the username portion of an email address before the @ and store it in a new field called "uid". I know that mutate has a split option, but it splits the content of the original field which I would prefer not to have happen. Initially tried:

 mutate {
    split => {"user" => "@"}
    add_field => {"uid" => "%{user[0]}"}

As discovered, this one changes the original field which I do not want, and for some reason this does not add a field called "uid" for some reason. Could use some further advice. Thank you.

Why not use a second grok to extract the username from the email?

"%{user[0]}" should be "%{[user][0]}"