Это могло бы сделать то, что Вы хотите:
sort -t '|' -k 2,2 -u foo.dat
Однако это сортирует вход согласно Вашему полю, которое Вы не можете хотеть. Если Вы действительно только хотите удалить дубликаты, Вашим наилучшим вариантом является Perl:
perl -ne '$a=(split "\\|")[1]; next if $h{$a}++; print;' foo.dat
Не излишество вообще. Начните использовать марионетку теперь, и это заплатит за себя в конечном счете. Серьезно.
Я использую марионетку, даже если я только развертываю один сервер, потому что я знаю в какой-то момент, что он должен будет, вероятно, быть заменен, восстановлен, или другой добавленный как резервное копирование.