Separar valores dentro de um uma mesma coluna [RESOLVIDO]

1. Separar valores dentro de um uma mesma coluna [RESOLVIDO]

Gregori Rovadoscki
Gregori.rov

(usa Outra)

Enviado em 29/03/2016 - 14:33h

Olá..
Quero agradecer o espaço disponível pelo site para tentar resolver meu problema.
Seguinte, tenho um arquivo no seguinte formato, composto por três colunas:

1 a1 a1
1 b1 b1
1 c1 c1
2 a2 a2
2 b2 b2
2 c2 c2
3 a3 a3
3 b3 b3
3 c3 c3

Isso foi apenas para exemplo, meu arquivo tem de fato três colunas, no entanto, umas 900 MIL linhas, é gigante mesmo.
E preciso que o arquivo fique no formato

1
a1b1c1
a1b1c1
2
a2b2c2
a2b2c2
3
a3b3c3
a3b3c3

O arquivo que necessito é assim mesmo, é devido a exigencia de um programa de genética que preciso usar,
Na linha 1, que está representada pelo Valor "1" seria o individuo, a linha 2 que tem esses valor "a1b1c1" (que precisarão estar um ao lado do outro sem espaço mesmo) seria o alelo 1, enquanto que a linha 3 seria o alelo 3, a partir da linha quatro segue a mesma lógica mas pra outros individuos ("2" e "3" no caso). E no meu arquivo tenho 200 individuos.
O artigo original são três colunas, enquanto que oartigo necessitado será de apenas uma coluna.

Muito obrigado.





  


2. MELHOR RESPOSTA

Eder Matumoto
Ramlethal

(usa Slackware)

Enviado em 29/03/2016 - 17:54h

#!/bin/bash
last_num=$(head -n 1 $1 | cut -d ' ' -f 1)

while read line; do
num=$(echo $line | cut -d ' ' -f 1)
line_1="$line_1 $(echo $line | cut -d ' ' -f 2)"
line_2="$line_2 $(echo $line | cut -d ' ' -f 3)"

if [ "$num" != "$last_num" ]; then
echo $last_num
echo $line_1
echo $line_2

line_1="$(echo $line | cut -d ' ' -f 2)"
line_2="$(echo $line | cut -d ' ' -f 3)"
fi
last_num=$num
done < $1

echo $last_num
echo $line_1
echo $line_2


3. Re: Separar valores dentro de um uma mesma coluna [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 29/03/2016 - 14:42h

Tem como colar um pedaço do arquivo?
Isso pode ser conseguido com o comando head.

É para ter certeza de que pode ser feito algo de diferente.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



4. Re: Separar valores dentro de um uma mesma coluna [RESOLVIDO]

Gregori Rovadoscki
Gregori.rov

(usa Outra)

Enviado em 29/03/2016 - 14:50h

Agradeço sua atenção.
215 A A
215 A A
215 A A
215 A A
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T

Então cara, uma parte do arquivo é assim! Com vê, tem muita coisa repetida, isso é bem normal mesmo, mas preciso que ele fique daquele jeito, que pra mim é muito complexo. Muito Obrigado..



5. Re: Separar valores dentro de um uma mesma coluna [RESOLVIDO]

Gregori Rovadoscki
Gregori.rov

(usa Outra)

Enviado em 29/03/2016 - 14:51h

listeiro_037 escreveu:

Tem como colar um pedaço do arquivo?
Isso pode ser conseguido com o comando head.

É para ter certeza de que pode ser feito algo de diferente.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Agradeço sua atenção.
215 A A
215 A A
215 A A
215 A A
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T

Então cara, uma parte do arquivo é assim! Com vê, tem muita coisa repetida, isso é bem normal mesmo, mas preciso que ele fique daquele jeito, que pra mim é muito complexo. Muito Obrigado..


6. Re: Separar valores dentro de um uma mesma coluna [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 29/03/2016 - 14:56h

Então as linhas com

215 A A
215 A A
215 A A
215 A A

3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T

Tem que ficar

215
A A A A A A A A

3000
T T T T T T T T T T T T T T

É isto? O exemplo tem que ser extremamente exato.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden



7. Re: Separar valores dentro de um uma mesma coluna [RESOLVIDO]

Gregori Rovadoscki
Gregori.rov

(usa Outra)

Enviado em 29/03/2016 - 14:57h

listeiro_037 escreveu:

Então as linhas com

215 A A
215 A A
215 A A
215 A A

3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T

Tem que ficar

215
A A A A A A A A

3000
T T T T T T T T T T T T T T

É isto? O exemplo tem que ser extremamente exato.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Exatamente isso..
=)





8. Re: Separar valores dentro de um uma mesma coluna [RESOLVIDO]

Gregori Rovadoscki
Gregori.rov

(usa Outra)

Enviado em 29/03/2016 - 15:09h

listeiro_037 escreveu:

Então as linhas com

215 A A
215 A A
215 A A
215 A A
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T TTem que ficar

215
A A A A A A A A

3000
T T T T T T T T T T T T T T

É isto? O exemplo tem que ser extremamente exato.

----------------------------------------------------------------------------------------------------------------
# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


215 A A
215 A A
215 A A
215 A A
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 A T

Lembrando que as letras podem mudar como fiz na última linha

E assim pode ocorrer

215
A A A A A A A A

3000
T T T T T T T T T T T T A T





9. Re: Separar valores dentro de um uma mesma coluna [RESOLVIDO]

Eder Matumoto
Ramlethal

(usa Slackware)

Enviado em 29/03/2016 - 16:24h

Crie esse shell script:

#!/bin/bash
last_num=$(head -n 1 $1 | cut -d ' ' -f 1)

while read line; do
num=$(echo $line | cut -d ' ' -f 1)
line_1="$line_1$(echo $line | cut -d ' ' -f 2)"
line_2="$line_2$(echo $line | cut -d ' ' -f 3)"

if [ "$num" != "$last_num" ]; then
echo $last_num
echo $line_1
echo $line_2

line_1="$(echo $line | cut -d ' ' -f 2)"
line_2="$(echo $line | cut -d ' ' -f 3)"
fi
last_num=$num
done < $1

echo $last_num
echo $line_1
echo $line_2


De as permissões de execução e depois chame ele assim:

./meu_script.sh arquivo_entrada 


Se quiser escrever a saída diretamente em um arquivo de saída:

./meu_script.sh arquivo_entrada > arquivo_saida 



10. Re: Separar valores dentro de um uma mesma coluna

Renan Arantes
R3nan

(usa Debian)

Enviado em 29/03/2016 - 16:35h

segue o que eu fiz pra tentar te ajudar, veja que abaixo estou primeiramente listando o conteúdo do arquivo lista.txt, depois executo o script com o comando "sh script.sh lista.txt" passando como paramento o arquivo lista.txt e logo em seguida o script que eu fiz pra vc ver ok. teste ai e retorne

esperto ter ajudado


renan@ultra:~$ cat lista.txt
215 A A
215 A A
215 A A
215 A A
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 A T
renan@ultra:~$ sh script.sh lista.txt
215
A A
A A
A A
A A
3000
T T
T T
T T
T T
T T
T T
A T
renan@ultra:~$ cat script.sh
#!/bin/bash
arquivo=$1
indice=$(cat $arquivo | awk '{print $1}' | uniq)
for i in $indice; do
echo $i
cat $arquivo | grep $i | awk '{x=$1; $1=""; print $0}'
done
renan@ultra:~$



11. Re: Separar valores dentro de um uma mesma coluna

Gregori Rovadoscki
Gregori.rov

(usa Outra)

Enviado em 29/03/2016 - 17:24h

Ramlethal escreveu:

Crie esse shell script:

#!/bin/bash
last_num=$(head -n 1 $1 | cut -d ' ' -f 1)

while read line; do
num=$(echo $line | cut -d ' ' -f 1)
line_1="$line_1$(echo $line | cut -d ' ' -f 2)"
line_2="$line_2$(echo $line | cut -d ' ' -f 3)"

if [ "$num" != "$last_num" ]; then
echo $last_num
echo $line_1
echo $line_2

line_1="$(echo $line | cut -d ' ' -f 2)"
line_2="$(echo $line | cut -d ' ' -f 3)"
fi
last_num=$num
done < $1

echo $last_num
echo $line_1
echo $line_2


De as permissões de execução e depois chame ele assim:

./meu_script.sh arquivo_entrada 


Se quiser escrever a saída diretamente em um arquivo de saída:

./meu_script.sh arquivo_entrada > arquivo_saida 


Cara, muito obrigado deu certinho..
Só mais uma dúvida:
Pra eu fazer a mesma coisa, no caso anterior nas linhas "2" e "3" (ex: TTTTT) eu deixei sem espaços entre as letras, mas pra fazer a mesma coisa, no entanto, pra eu deixar com espaços (T T T T T), como devo fazer?



=)



12. Re: Separar valores dentro de um uma mesma coluna [RESOLVIDO]

Gregori Rovadoscki
Gregori.rov

(usa Outra)

Enviado em 29/03/2016 - 17:27h

R3nan escreveu:

segue o que eu fiz pra tentar te ajudar, veja que abaixo estou primeiramente listando o conteúdo do arquivo lista.txt, depois executo o script com o comando "sh script.sh lista.txt" passando como paramento o arquivo lista.txt e logo em seguida o script que eu fiz pra vc ver ok. teste ai e retorne

esperto ter ajudado


renan@ultra:~$ cat lista.txt
215 A A
215 A A
215 A A
215 A A
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 T T
3000 A T
renan@ultra:~$ sh script.sh lista.txt
215
A A
A A
A A
A A
3000
T T
T T
T T
T T
T T
T T
A T
renan@ultra:~$ cat script.sh
#!/bin/bash
arquivo=$1
indice=$(cat $arquivo | awk '{print $1}' | uniq)
for i in $indice; do
echo $i
cat $arquivo | grep $i | awk '{x=$1; $1=""; print $0}'
done
renan@ultra:~$


Muitissímo obrigado, Renan. Ajudou e muito, obrigado mesmo por sua atenção. Abraço.




01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts