Use the View menu to toggle the show/hide groups for the contacts app. When groups are visible, you can easily control which group gets an imported contact rather than having to change the default group several times.
To determine which group a specific contact is, search for the contact in question (or a search that shows the contact) and select the first group for each source one by one.
The results in the main window will update and you can isolate which service is feeding which contact entries.
I'm not aware of a good script or one step move, so I drag the contact(s) to the desktop to get a vcard representation of the contact and then delete it from the improper store. Alternatively, you could inspect each group and handle any contacts that you don't want stored with that service.
If I have a few contacts to refile, I make folders on the desktop named for where I want the contacts to be stored and "export by mouse" the contacts that are mis-filed.
The folder makes importing the group much easier. Rather than dragging individual vcard files back into the app, dropping the one folder on the proper group files that group appropriately.