Sim, há algumas maneiras de fazer isso.
Sort
é seu amigo: Ordenar Wiki .
Como é o Awk
: Awk Howto .
É possível transformar isso:
1 Alice
1 Bob
1 Cary
2 Dan
3 Eve
3 Fred
para isso:
1 Alice,Bob,Cary
2 Dan
3 Eve,Fred
usando o shell? (sem Perl, Ruby, Python, etc)
Usando matrizes associativas na versão 4 do bash:
declare -A ary
while read line; do
set -- $line
ary[$1]+="$2,"
done < input_file
for key in ${!ary[@]}; do
printf "%s %s\n" $key ${ary[$key]%,} # the "%," strips the trailing comma
done
Porcaria, eu não pude resistir ao desafio. Aqui está minha solução no shell (bash para ser exato) como um oneliner:
k=0; while read i j; do if [ $k -eq $i ]; then echo -n ",$j"; \
else [ $k -gt 0 ] && echo; echo -n "$i $j"; k=$i; fi; done \
</tmp/infile; echo
que produz a saída desejada, formatada corretamente:
1 Alice,Bob,Cary
2 Dan
3 Eve,Fred
Suposições:
Se # 2 não é válido, você precisa executar a entrada através de sort(1)
primeiro com uma classificação numérica para colocá-la na ordem correta.
Se eu descobrir que acabei de responder ao seu dever de casa, ficarei extremamente irritado. Meu único consolo é que, se o seu professor vir o que eu escrevi, eles pensarão que você é louco.
Esse aqui no stackoverflow é muito parecido e tem algumas boas respostas: link