[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [shell-script] Help
From: |
Humberto Pereira |
Subject: |
Re: [shell-script] Help |
Date: |
Mon, 24 Oct 2005 13:26:51 -0200 |
User-agent: |
Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.7.12) Gecko/20050923 Debian/1.7.12-0ubuntu05.04 |
Caro vinicius,
realmente isso eh muito simples, principalmente se vc usar awk. Veja o
script abaixo:
awk ' NF == 9 {
indice = $7 " " $8 " " $9;
if(campo[indice] != 1) {
campo[indice] = 1;
print
}
} '
NF diz p/ vc a quantidade de campos. Como vc disse q seu padrao era
sempre 9 campos, voce jah pega todos q nao tem esse tamanho e descarta.
Eu um vetor p/ guardar o valor do setimo, oitavo e nono campos. awk usa
um conceito bem interessante de vetores, chamado vetor associativo. Voce
pode associar uma string ao indice do campo, e com isso, voce consegue
saber se aquele campo jah teve o valor anterior.
Veja a saida:
[begnini 0 coke tmp]$ cat a.txt
PT11-C9-005-002-E05-CT.F p2 (TA)11 22 492 513
PT11-C9-005-006-D03-CT.F p3 (AGA)7 21 172 192
GGCAGAAAGCAGACGTTGA AGCCCACCACGATGAGATAC 241
PT11-C9-005-006-E08-CT.F p3 (AGA)7 21 128 148
CAGAAAGCGGACGTTGATTA AGCCCACCACGATGAGATAC 239
PT11-C9-005-006-H11-CT.F p3 (AAT)18 54 137 190
CGTTCAAGAAAGCATGTGGA AAAAGGTGAAGGAGCAGCAA 183
PT11-C9-005-008-A06-CT.F p3 (AAT)18 54 138 191
CGTTCAAGAAAGCATGTGGA AAAAGGTGAAGGAGCAGCAA 183
[begnini 0 coke tmp]$ awk ' NF == 9 { indice = $7 " " $8 " " $9;
if(campo[indice] != 1) { campo[indice] = 1; print } } ' a.txt
PT11-C9-005-006-D03-CT.F p3 (AGA)7 21 172 192
GGCAGAAAGCAGACGTTGA AGCCCACCACGATGAGATAC 241
PT11-C9-005-006-E08-CT.F p3 (AGA)7 21 128 148
CAGAAAGCGGACGTTGATTA AGCCCACCACGATGAGATAC 239
PT11-C9-005-006-H11-CT.F p3 (AAT)18 54 137 190
CGTTCAAGAAAGCATGTGGA AAAAGGTGAAGGAGCAGCAA 183
[begnini 0 coke tmp]$
Dica: na proxima vez, use um subject menos generico, p/ q possamos ter
ideia do q vc quer, por ex., algo como "filtrando sequenciamento genetico".
[]s
Humberto Pereira.
vinicius wrote:
> Olá,
>
> Precisava formatar um arquivo texto.
>
> Este é o padrão:
> PT11-C9-005-002-E05-CT.F p2 (TA)11 22 492 513
> PT11-C9-005-006-D03-CT.F p3 (AGA)7 21 172 192
> GGCAGAAAGCAGACGTTGA AGCCCACCACGATGAGATAC 241
> PT11-C9-005-006-E08-CT.F p3 (AGA)7 21 128 148
> CAGAAAGCGGACGTTGATTA AGCCCACCACGATGAGATAC 239
> PT11-C9-005-006-H11-CT.F p3 (AAT)18 54 137 190
> CGTTCAAGAAAGCATGTGGA AAAAGGTGAAGGAGCAGCAA 183
> PT11-C9-005-008-A06-CT.F p3 (AAT)18 54 138 191
> CGTTCAAGAAAGCATGTGGA AAAAGGTGAAGGAGCAGCAA 183
>
> Este arquivo é composto por 9 campos, algumas vezes os campos 7, 8 e 9
> estão vazios e essas linhas precisasm ser removidas. Outras vezes os
> campos 7, 8 e 9 são idênticos, eu precisava manter apenas 1 deles (o
> primeiro).
> Nessas duas situações eu gostaria de gerar outro arquivos com essas
> linhas removidas. Me disserem que shell é bom para isso, alguém poderia
> me ajudar.
>
> Saída:
> PT11-C9-005-006-D03-CT.F p3 (AGA)7 21 172 192
> GGCAGAAAGCAGACGTTGA AGCCCACCACGATGAGATAC 241
> PT11-C9-005-006-E08-CT.F p3 (AGA)7 21 128 148
> CAGAAAGCGGACGTTGATTA AGCCCACCACGATGAGATAC 239
> PT11-C9-005-006-H11-CT.F p3 (AAT)18 54 137 190
> CGTTCAAGAAAGCATGTGGA AAAAGGTGAAGGAGCAGCAA 183
>
>
>
> ---------------------------------------------------------------------
> Esta lista não admite a abordagem de outras liguagens de programação, como
> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
> aviso.
> ---------------------------------------------------------------------
> Sair da lista: address@hidden
> ---------------------------------------------------------------------
> Esta lista é moderada de acordo com o previsto em
> http://www.listas-discussao.cjb.net
> ---------------------------------------------------------------------
>
> Links do Yahoo! Grupos
>
>
>
>
>
>
>
- Help, vinicius, 2005/10/24
- Re: [shell-script] Help,
Humberto Pereira <=