O que você perdeu é o )
na sua subcláusula stdin . O que eu suspeito que você ganhou é uma dor de cabeça tentando ler seu código.
Tente isso, o que se presta a otimização adicional porque é (mais) legível:
tr '[:blank:]' $'\t' <file2 |
awk '
BEGIN { FS="\t"; OFS="\t" }
{ if ($2 == "u") print $0, $1; else print $0, $3 }
' |
awk '
{ gsub(/ /,"\t"); l=$4; sub(/.*_/,"",l); print $2 "\t" $3 "\t" l }
' |
sort |
join -t $'\t' -a1 -e "u" -1 1 -2 1 -o 1.1,2.1,2.2 file1 - >out