Enviado em 29/03/2016 - 18:19h
#!/bin/bash
> arq.temp
sort arq|uniq -c|sed 's/^[ ]\+//' >> arq.temp
NL=$(awk 'END {print NR}' arq.temp)
for ((L=1;L<=$NL;L++));do
if (($L>1));then
LM=$((L-1))
LINANT=$(sed -n "$LM"p arq.temp)
read C1an C2an C3an C4an <<< "$LINANT"
LINATU=$(sed -n "$L"p arq.temp)
read C1at C2at C3at C4at <<< "$LINATU"
#SE C2 LINHA ATUAL = C2 LINHA ANTERIOR
if [ "$C2at" = "$C2an" ];then
for ((i=0;i<$C1at;i++));do
echo -n "$C3at $C4at "
done
else
echo -e "\n$C2at"
for ((i=0;i<$C1at;i++));do
echo -n "$C3at $C4at "
done
fi
else
LINATU=$(sed -n "$L"p arq.temp)
read C1at C2at C3at C4at <<< "$LINATU"
echo -e "\n$C2at"
for ((i=0;i<$C1at;i++));do
echo -n "$C3at $C4at "
done
fi
done
--------------------------------------------------------------------------------------------------------
EDITADO em 29/03/2016 as 19:50h
Pensando um pouquinho, deu para reduzir o código . . . :)
#!/bin/bash
NL=$(awk 'END {print NR}' $1)
for ((i=1;i<=$NL;i++));do
if egrep -q "\b$i\b" $1;then
echo -e "\n$i"
awk '{if($1=='$i')printf "%s %s " ,$2,$3}' $1;echo
fi
done;echo
cat arq
1 A A
1 A A
1 A A
1 A A
2 T T
2 T T
2 T T
2 T T
2 T T
2 T T
2 T T
2 A T
3 B B
3 B B
--------------------------------------------------------------------------------------------------------
Se resolver, marque como resolvido, por favor.
Gostando da resposta, marque-a como MELHOR, dessa forma, ganho uns pontinhos,
o que incentiva a continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
Att.:
Marcelo
Criar entrada (menuentry) ISO no Grub
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar o VIM 9.1 no Debian 12
Como saber o range de um IP público?
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Ocomon 6.0.1 - Problemas ao editar configurações estendidas (7)