Perl
O hash %h
contém os dados, enquanto o array @h
gerencia a ordem em que os elementos hash foram encontrados. OTW, as chaves hash serão selecionadas em ordem aleatória.
perl -F, -lane '
BEGIN{ $"=$,=","; }
push @{$h{"@F[-3..-1]"}}, $F[0];
$h[-1+keys %h] = "@F[-3..-1]";
END{ print @{$h{$_}}, $_ for @h; }
' yourcsvfile
Sed
sed -e '
:loop
$!N
s/^\(.*\)\(\(,[^,]*\)\{3\}\)\n\([^,]*\)$/,/
tloop
P;D
' yourcsvfile
Bash
sed \$G yourcsvfile | # we add a dummy line to signal last record has been processed
while IFS=, read -r -a A; do
var=${A[@]: -3:3}
var=${var// /,}
case $var in
"$prev" ) x=${x-}${x:+,}${A[0]} ;;
* ) case $prev in ?* ) echo "$x,$prev" ;; esac; prev=$var; x=${A[0]} ;;
esac
done