There are two common methods for triggering sounds from script.
The first common method to achieve this would be to not have an audio clip variable at all, but instead attach an AudioSource component to your GameObject (or to the pickup object), and drag the "pickup" audio clip reference into that audio source component.
You could then trigger the sound by calling
audio.Play();
from a script on the same object. Or, if you placed the AudioSource on the pickup object, you could call it from your player object when it's collected by using the "otherObject" variable in your OnTriggerEnter function, like this:
otherObject.audio.Play();
However, there is another way to play sounds which doesn't require an AudioSource component to be attached. If your script has a reference to the audioClip to play (as it does currently), a simple way to trigger the sound is to use PlayClipAtPoint.
You could place this code in your OnTriggerEnter function, near the line where the pickup is destroyed:
AudioSource.PlayClipAtPoint(pickup, transform.position);
This will play the sound at the position of the player object (the object that this script is placed on) in the 3D world. Depending on your situation you may want to change this to:
AudioSource.PlayClipAtPoint(pickup, collider.transform.position);
(to play the sound at the location of the other object)
or
AudioSource.PlayClipAtPoint(pickup, Camera.main.transform.position);
(to play the sound at the camera's location, so that it doesn't sound as though it's coming from any particular location in the 3d world)