Organizar Arquivo [RESOLVIDO]

1. Organizar Arquivo [RESOLVIDO]

Deidy Campiol
DeidyC

(usa Outra)

Enviado em 01/04/2016 - 10:42h

Bom dia, galera. Novamente agradecendo a atenção de todos. Mais uma dúvida

Tenho o seguinte arquivo

name id alello chr pos snp
s1 215 a 1 11 a215
s1 216 a 1 11 a216
s1 217 a 1 11 a217
s1 218 a 1 11 a218
s2 215 b 2 22 b215
s2 216 b 2 22 b216
s2 217 b 2 22 b217
s2 218 b 2 22 b218

E preciso que ele fique assim:

snp allelo chr pos 215 216 217 218
s1 a 1 11 a215 a216 a217 a218
s2 b 2 22 b215 b216 b217 b218


muito obrigado






  


2. MELHOR RESPOSTA

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 02/04/2016 - 12:50h

DeidyC escreveu:
Bom dia, galera. Novamente agradecendo a atenção de todos. Mais uma dúvida
Tenho o seguinte arquivo
name id alello chr pos snp
s1 215 a 1 11 a215
s1 216 a 1 11 a216
s1 217 a 1 11 a217
s1 218 a 1 11 a218
s2 215 b 2 22 b215
s2 216 b 2 22 b216
s2 217 b 2 22 b217
s2 218 b 2 22 b218
E preciso que ele fique assim:
snp allelo chr pos 215 216 217 218
s1 a 1 11 a215 a216 a217 a218
s2 b 2 22 b215 b216 b217 b218
Muito obrigado

Boa tarde Deidy.
Ignore as perguntas feitas anteriormente (RESPOSTA nº 2) . . . :)
Segue a solução:

#!/bin/bash
TEMP="log_temp.txt"
[ $1 ] || { echo -e "\n USO: $0 log.txt" ; exit ; }
sed -n 1p $1 > $TEMP
sed -i 1d $1
awk '{if (NR%4!=0)print $1,$2,$3,$4,$5,$6;else print $1,$2,$3,$4,$5,$6"\n\n"}' $1 >> $TEMP
sleep 1
awk 'BEGIN { RS="\n\n";FS="\n";} {print $1,$2,$3,$4,$5"\n"}' $TEMP |sed '/^$/d'|awk '{if (NR==1)print $6,$3,$4,$5,$8,$14,$20,$26"\n"$7,$9,$10,$11,$12,$18,$24,$30;else print $1,$3,$4,$5,$6,$12,$18,$24 }'


SAíDA:
snp alello chr pos 215 215 217 218
s1 a 1 11 a215 a215 a217 a218
s2 b 2 22 b215 b216 b216 b218

ONDE:
cat log.txt

name id alello chr pos snp
s1 215 a 1 11 a215
s1 216 a 1 11 a216
s1 217 a 1 11 a217
s1 218 a 1 11 a218
s2 215 b 2 22 b215
s2 216 b 2 22 b216
s2 217 b 2 22 b217
s2 218 b 2 22 b218


CONSIDERAÇÕES:
EXCETO O REGISTRO 01(05 CAMPOS), OS DEMAIS TEM 04 CAMPOS


----------------------------------------------------------------------------------------
Seguindo as REGRAS do VIVA O LINUX, se resolver, marque como resolvido, por favor.
----------------------------------------------------------------------------------------
Gostando da resposta, marque-a como a MELHOR, dessa forma, ganho uns pontinhos, o que incentiva
continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------
Att.:
Marcelo





3. Re: Organizar Arquivo [RESOLVIDO]

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/04/2016 - 13:58h

DeidyC escreveu:
Bom dia, galera. Novamente agradecendo a atenção de todos. Mais uma dúvida
Tenho o seguinte arquivo

name id alello chr pos snp
s1 215 a 1 11 a215
s1 216 a 1 11 a216
s1 217 a 1 11 a217
s1 218 a 1 11 a218

s2 215 b 2 22 b215
s2 216 b 2 22 b216
s2 217 b 2 22 b217
s2 218 b 2 22 b218

E preciso que ele fique assim:
snp allelo chr pos 215 216 217 218
s1 a 1 11 a215 a216 a217 a218
s2 b 2 22 b215 b216 b217 b218
muito obrigado

----------------------------------------------------------------------------------------------------
Boa tarde, DeidyC.
O CAMPO "id", sempre segue a sequencia numérica, 215, 216, 217 e 218?
Cada REGISTRO, sempre tem 04 "LINHAS"? (s1 s2 s3 s4)
Campo "alello" segue a ordem alfabética?
No aguardo,
Marcelo






4. Re: Organizar Arquivo [RESOLVIDO]

Deidy Campiol
DeidyC

(usa Outra)

Enviado em 02/04/2016 - 16:16h

msoliver escreveu:

DeidyC escreveu:
Bom dia, galera. Novamente agradecendo a atenção de todos. Mais uma dúvida
Tenho o seguinte arquivo
name id alello chr pos snp
s1 215 a 1 11 a215
s1 216 a 1 11 a216
s1 217 a 1 11 a217
s1 218 a 1 11 a218
s2 215 b 2 22 b215
s2 216 b 2 22 b216
s2 217 b 2 22 b217
s2 218 b 2 22 b218
E preciso que ele fique assim:
snp allelo chr pos 215 216 217 218
s1 a 1 11 a215 a216 a217 a218
s2 b 2 22 b215 b216 b217 b218
Muito obrigado

Boa tarde Deidy.
Ignore as perguntas feitas anteriormente (RESPOSTA nº 2) . . . :)
Segue a solução:

#!/bin/bash
TEMP="log_temp.txt"
[ $1 ] || { echo -e "\n USO: $0 log.txt" ; exit ; }
sed -n 1p $1 > $TEMP
sed -i 1d $1
awk '{if (NR%4!=0)print $1,$2,$3,$4,$5,$6;else print $1,$2,$3,$4,$5,$6"\n\n"}' $1 >> $TEMP
sleep 1
awk 'BEGIN { RS="\n\n";FS="\n";} {print $1,$2,$3,$4,$5"\n"}' $TEMP |sed '/^$/d'|awk '{if (NR==1)print $6,$3,$4,$5,$8,$14,$20,$26"\n"$7,$9,$10,$11,$12,$18,$24,$30;else print $1,$3,$4,$5,$6,$12,$18,$24 }'


SAíDA:
snp alello chr pos 215 215 217 218
s1 a 1 11 a215 a215 a217 a218
s2 b 2 22 b215 b216 b216 b218

ONDE:
cat log.txt

name id alello chr pos snp
s1 215 a 1 11 a215
s1 216 a 1 11 a216
s1 217 a 1 11 a217
s1 218 a 1 11 a218
s2 215 b 2 22 b215
s2 216 b 2 22 b216
s2 217 b 2 22 b217
s2 218 b 2 22 b218


CONSIDERAÇÕES:
EXCETO O REGISTRO 01(05 CAMPOS), OS DEMAIS TEM 04 CAMPOS


----------------------------------------------------------------------------------------
Seguindo as REGRAS do VIVA O LINUX, se resolver, marque como resolvido, por favor.
----------------------------------------------------------------------------------------
Gostando da resposta, marque-a como a MELHOR, dessa forma, ganho uns pontinhos, o que incentiva
continuar colaborando, ajudando, participando e compartilhando conhecimentos . . . :)
----------------------------------------------------------------------------------------
Att.:
Marcelo






Grande, Marcelo. Mais uma vez obrigado. E parabéns pela dedicação, atenção e paciência com nós os iniciantes.

Abraço.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts