AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / user-213707

Age87's questions

Martin Hope
Age87
Asked: 2021-10-02 09:14:35 +0800 CST

extrair campos com base em uma string (parcial e exata)

  • 1

Expertos: Quero extrair campos com base em uma string (parcial e exata). Em algumas linhas esses campos são movidos uma ou duas colunas , então não consigo especificar a coluna (que é a extensão do meu conhecimento). Eu também preciso extrair o 1º, 2º, 4º e 5º campos, mas eles não variam de linha para linha, então eu posso fazer isso sozinho.

Especificamente, quero extrair o campo com a string parcial " DP4= " e o campo com uma string correspondente como " MODERATE " mais o campo à esquerda e à direita :

entrada:

NW_006532014.1  603822  .       T       C       222.0   .       DP=103  ADF=30,22       ADR=13,16       AD=43,38        VDB=0.0570121   SGB=-0.693143   RPB=0.810487    MQB=0.570226      MQSB=0.033126   BQB=0.964281    MQ0F=0  ICB=1   HOB=0.5 AC=1    AN=2    DP4=30,13,22,16 MQ=35   ANN=C   missense_variant        MODERATE        ABCB6   ABCB6     transcript      XM_007419806.2
NW_006532015.1  1015800 .       AAA     AAACAA  228.0   .       INDEL   IDV=106 IMF=0.905983    DP=117  ADF=6,50        ADR=19,42       AD=25,92        VDB=0.22041     SGB=-0.693147     MQSB=0.182586   MQ0F=0  AC=2    AN=2    DP4=6,19,50,42  MQ=36   ANN=AAACAA      disruptive_inframe_insertion    MODERATE        CEP131  CEP131  transcriptXM_025166060.1  protein_coding  11/27
NW_006532017.1  910856  .       C       G       78.0    .       DP=118  ADF=50,14       ADR=25,2        AD=75,16        VDB=0.954018    SGB=-0.689466   RPB=0.939107    MQB=0.0031569     MQSB=0.280595   BQB=0.0859367   MQ0F=0  ICB=1   HOB=0.5 AC=1    AN=2    DP4=50,25,14,2  MQ=44   ANN=G   missense_variant        MODERATE        HPS1    HPS1      transcript      XM_025169525.1
NW_006532033.1  475415  .       T       C       222.0   .       DP=123  ADF=18,36       ADR=18,15       AD=36,51        VDB=0.984451    SGB=-0.693147   RPB=0.428811    MQB=1.68713e-05   MQSB=0.565818   BQB=0.837943    MQ0F=0  ICB=1   HOB=0.5 AC=1    AN=2    DP4=18,18,36,15 MQ=41   ANN=C   missense_variant        MODERATE        PTCH2   PTCH2     transcript      XM_025164053.1
NW_006532040.1  586236  .       G       C       29.9689 .       DP=106  ADF=40,9        ADR=25,1        AD=65,10        VDB=0.731987    SGB=-0.670168   RPB=0.945403    MQB=0.00509228    MQSB=0.210814   BQB=0.365756    MQ0F=0  ICB=1   HOB=0.5 AC=1    AN=2    DP4=40,25,9,1   MQ=46   ANN=C   missense_variant        MODERATE        OMG     OMG       transcript      XM_007420376.3
NW_006532040.1  674528  .       T       C       221.0   .       DP=128  ADF=39,15       ADR=19,9        AD=58,24        VDB=0.253732    SGB=-0.692831   RPB=0.952839    MQB=1.09944e-10   MQSB=0.755937   BQB=0.749586    MQ0F=0  ICB=1   HOB=0.5 AC=1    AN=2    DP4=39,19,15,9  MQ=48   ANN=C   missense_variant        MODERATE        NF1     NF1       transcript      XM_007420379.3

saída desejada (tab-delim):

DP4=30,13,22,16 missense_variant        MODERATE        ABCB6
DP4=6,19,50,42  disruptive_inframe_insertion    MODERATE        CEP131
DP4=50,25,14,2  missense_variant        MODERATE        HPS1
DP4=18,18,36,15 missense_variant        MODERATE        PTCH2
DP4=40,25,9,1   missense_variant        MODERATE        OMG
DP4=39,19,15,9  missense_variant        MODERATE        NF1

Obrigado!

awk text-processing
  • 2 respostas
  • 154 Views
Martin Hope
Age87
Asked: 2020-03-06 18:55:43 +0800 CST

simplificação de loop

  • 0

Eu gostaria de entender o loop for abaixo e talvez simplificá-lo. Por exemplo, gostaria de concatenar os arquivos rem para cada amostra no diretório.

Arquivos:

file1.1.fq
file1.rem.1.fq
file1.2.fq
file1.rem.2.fq
file2.1.fq
file2.rem.1.fq
file2.2.fq
file2.rem.2.fq

loop for:

list=`for i in *rem*.1.fq; do echo $i | cut -f 1 -d \.; done`
for i in $list; do cat $i.rem.1.fq $i.rem.2.fq > $i.rem.b.fq; done

Posso fazer isso sem fazer uma lista? O que cut -f 1 -dfaz? E por que cat $i.rem.1.fqfunciona, mas não cat $i.1.fqse a remparte do nome do arquivo estiver entre os dois *da lista? Isso significa que ele captura tudo antes *rem*(por exemplo, arquivo1)?

files for
  • 1 respostas
  • 64 Views
Martin Hope
Age87
Asked: 2019-11-22 12:57:30 +0800 CST

adicione dois campos com letras codificadas como números separados por dois pontos nos campos 4 e 5

  • 0

eu quero criar um 8º e 9º campo/coluna com a letra apropriada codificada como números nas colunas 4 e 5. Os seis números separados por dois pontos correspondem aA:T:C:G:N:del

Nota: algumas linhas na coluna 6 e 7 estão vazias que consertei inserindo NA com isso:

awk -F'[[:space:]]' '$5 && !$6{ $6="NA" }1' 
awk -F'[[:space:]]' '$6 && !$7{ $7="NA" }1'

Em seguida, fez o arquivo delimitado por tabulação novamente comsed -e 's/ /\t/g'

Arquivo.tsv

    NW_006532398.1  302035  C   0:0:32:0:0:0    42:0:0:0:0:0    KCND2   intergenic_region
    NW_006532656.1  289636  C   0:0:28:0:0:0    0:28:0:0:0:0    CNTN1   intron_variant
    NW_006532762.1  6396    C   0:54:0:0:0:0    0:0:53:0:0:0    NA  intergenic_region
    NW_006532762.1  25741   C   0:0:62:0:0:0    0:43:0:0:0:0    NA  intergenic_region
    NW_006532762.1  32304   T   0:60:0:0:0:0    0:0:49:0:0:0    NA  intergenic_region
    NW_006532762.1  179065  G   0:0:0:45:0:0    59:0:0:0:0:0    DOCK4   intron_variant

Exemplo de output.tsv

NW_006532398.1  302035  C   0:0:32:0:0:0    42:0:0:0:0:0    KCND2   intergenic_region   C   A
NW_006532656.1  289636  C   0:0:28:0:0:0    0:28:0:0:0:0    CNTN1   intron_variant  C   T
NW_006532762.1  6396    C   0:54:0:0:0:0    0:0:53:0:0:0     NA   intergenic_region T   C
NW_006532762.1  25741   C   0:0:62:0:0:0    0:43:0:0:0:0     NA   intergenic_region C   T
NW_006532762.1  32304   T   0:60:0:0:0:0    0:0:49:0:0:0     NA   intergenic_region T   C 
NW_006532762.1  179065  G   0:0:0:45:0:0    59:0:0:0:0:0    DOCK4   intron_variant  G   A

Qualquer ajuda é muito apreciada!!

awk sed
  • 3 respostas
  • 106 Views
Martin Hope
Age87
Asked: 2019-11-21 13:46:36 +0800 CST

adicionando colunas às linhas apropriadas combinando as duas primeiras colunas

  • 0

Desejo usar as duas primeiras colunas de cada arquivo para adicionar colunas adicionais de fil2, file3 e file4 para file1 nas linhas apropriadas (onde as duas primeiras colunas correspondem). O arquivo2 tem três colunas para adicionar ao arquivo1, mas todos os outros arquivos têm apenas uma coluna para adicionar, a última.

As entradas NW_456 44e NW_987 75não são anotadas no arquivo3 e, portanto, ausentes. Eu gostaria de manter isso vazio no arquivo de saída para essa coluna específica (sem realmente dizer 'vazio').

Exemplo:

arquivo1

NW_1234 23
NW_1234 29
NW_1234 778
NW_456 44
NW_987 75
NW_987 98
NW_5000 105
NW_5500 37
NW_5500 900

arquivo2

NW_1234 23  C   0:0:32:0:0:0    42:0:0:0:0:0
NW_1234 29  C   0:0:28:0:0:0    0:28:0:0:0:0
NW_1234 778 C   0:54:0:0:0:0    0:0:53:0:0:0
NW_456  44  G   0:0:0:45:0:0    59:0:0:0:0:0
NW_987  75  G   0:0:0:60:0:0    55:0:0:0:0:0
NW_987  98  C   0:0:63:0:0:0    0:42:0:0:0:0
NW_5000 105 G   0:0:71:0:0:0    0:50:0:0:0:0
NW_5500 37  G   0:0:0:54:0:0    55:0:0:0:0:0
NW_5500 900 A   43:0:0:0:0:0    0:0:0:37:0:0

arquivo3

NW_1234 23  DOCK
NW_1234 29  DOCK
NW_1234 778 DOCK
NW_987  98  TFEC
NW_5000 105 MIN
NW_5500 37  LIPG
NW_5500 900 MYC

ARQUIVO 4

NW_1234 23  intron_region
NW_1234 29  intron_region
NW_1234 778 intron_region
NW_456  44  intergenic
NW_987  75  intergenic
NW_987  98  intron_region
NW_5000 105 intron_region
NW_5500 37  intron_region
NW_5500 900 intron_region

arquivo de saída

NW_1234 23  C   0:0:32:0:0:0    42:0:0:0:0:0 DOCK intron_region
NW_1234 29  C   0:0:28:0:0:0    0:28:0:0:0:0 DOCK intron_region
NW_1234 778 C   0:54:0:0:0:0    0:0:53:0:0:0 DOCK intron_region
NW_456  44  G   0:0:0:45:0:0    59:0:0:0:0:0 (empty) intergenic
NW_987  75  G   0:0:0:60:0:0    55:0:0:0:0:0 (empty) intergenic
NW_987  98  C   0:0:63:0:0:0    0:42:0:0:0:0 TFEC intron_region
NW_5000 105 G   0:0:71:0:0:0    0:50:0:0:0:0 MIN  intron_region
NW_5500 37  G   0:0:0:54:0:0    55:0:0:0:0:0 LIPG intron_region
NW_5500 900 A   43:0:0:0:0:0    0:0:0:37:0:0 MYC  intron_region

Semelhante a esta pergunta: Adicionando coluna com base na correspondência da segunda coluna

Qualquer ajuda é apreciada!

grep awk
  • 1 respostas
  • 83 Views
Martin Hope
Age87
Asked: 2019-09-27 08:16:56 +0800 CST

Contar o número de TRUEs em um campo, relatando o número do campo, o número de TRUEs e a contagem de rótulos (grandes ou pequenos)

  • 2

Tenho um código rodando em uma máquina Linux, que conta o número de TRUEs encontrados em uma determinada coluna/campo, imprimindo como saída o número da coluna e o número de TRUEs naquela coluna.

Na nova entrada, as linhas são atribuídas (última coluna na entrada) como "grande" ou "pequena" (três de cada).

Eu gostaria de contar o número de "pequenos" e "grandes" para cada coluna com 2 ou mais TRUEs.

Código para encontrar colunas com 2 ou mais TRUEs (sei que o código abaixo ignora a primeira coluna de entrada):

awk -vtc=2 'NR==1{next};
                NR==2{for(i=2;i<=NF;i++){t[i]=0}};
                {for(i=2;i<=NF;i++){if($i=="TRUE"){t[i]++}}}
                END{
                    for(j in t)
                    if(t[j]>=tc){print(j,t[j])}
                }' input.tsv > output.tsv

Entrada.tsv:

MT MT MT MT MT MT MT MT MT MT
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE
FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE

output.tsv:

(primeira coluna: número da coluna; segunda coluna: número de TRUEs)

3 3
6 3
9 2
10 2

nova entrada.tsv

MT MT MT MT MT MT MT MT MT MT CAT
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE LARGE        
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE TRUE FALSE SMALL         
FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE SMALL        
FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE FALSE SMALL        
FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE FALSE TRUE LARGE     
FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE TRUE TRUE LARGE

Saída desejada.tsv:

(terceira coluna: número de TRUEs atribuídos como pequenos; quarta coluna: número de TRUEs atribuídos como grandes)

3 3 2 1
6 3 1 2
9 2 1 1
10 2 0 2

A ajuda de qualquer um de vocês linux wizards é muito apreciada!

text-processing
  • 3 respostas
  • 202 Views
Martin Hope
Age87
Asked: 2019-01-22 17:27:19 +0800 CST

extrair todas as linhas do arquivo_1, exceto aquelas com as duas primeiras colunas correspondentes às duas primeiras colunas do arquivo_2

  • 0

Eu gostaria de fazer o inverso disso (exatamente o mesmo exemplo): Extraia linhas do arquivo_1 com base na correspondência das duas primeiras colunas de um arquivo_2

Ou seja, extraia todas as linhas do arquivo_1, exceto aquelas com as duas primeiras colunas correspondentes às duas primeiras colunas do arquivo_2.

Responda:

awk 'NR==FNR {get[$1" "$2]++; next} !get[$1" "$2]' f2.txt f1.txt
awk text-processing
  • 1 respostas
  • 47 Views
Martin Hope
Age87
Asked: 2019-01-21 17:08:29 +0800 CST

Extraindo nomes de file_a usando informações de 2 colunas em file_b

  • 1

Com base em: Extraia nomes de File_B com intervalos sobrepostos com File_A

Eu quero extrair nomes de genes (geralmente coluna 10, o que vem depois de "Name=") combinando a primeira coluna de file_b com file_a e extraindo os nomes de genes se a segunda coluna de file_b estiver dentro do intervalo de genes, delineado pelas colunas 4 e 5 do arquivo_b. As primeiras colunas devem corresponder, de modo que eu obtenha apenas um gene por linha (file_b), mas, em teoria, poderia ter várias linhas adjacentes (column_b) correspondendo ao mesmo gene (por exemplo, se a segunda linha em file_b fosse MT 4065)

Existem alguns problemas com o código que tenho agora.

(1) do jeito que está configurado abaixo, a última linha de file_b é perdida da saída, embora isso mude se esta linha ( groupVII 17978350) for trazida para a lista. Gostaria que funcionasse do jeito que está configurado.

(2)Os nomes são truncados se tiverem caracteres especiais (por exemplo, dois pontos e hífens). Eu gostaria de ter o nome inteiro após o sinal de igual.

(3) Eu gostaria de corresponder a entrada/linha de file_b aos acertos do gene na saída, de modo que as duas primeiras colunas sejam a entrada e a terceira coluna seja o acerto do gene.

arquivo_a.tsv

MT  insdc   gene    2851    3825    .   +   .   ID=gene:ENSGACG00000020925  Name=mt-nd1 biotype=protein_coding  description=NADH dehydrogenase 1%2C mitochondrial [Source:ZFIN%3BAcc:ZDB-GENE-011205-7] gene_id=ENSGACG00000020925  logic_name=mt_genbank_import    version=1
MT  insdc   gene    4036    5082    .   +   .   ID=gene:ENSGACG00000020929  Name=mt-nd2 biotype=protein_coding  description=NADH dehydrogenase 2%2C mitochondrial [Source:ZFIN%3BAcc:ZDB-GENE-011205-8] gene_id=ENSGACG00000020929  logic_name=mt_genbank_import    version=1
groupIII    ensembl gene    7332324 7334769 .   -   .   ID=gene:ENSGACG00000015265  Name=si:dkeyp-68b7.10   biotype=protein_coding  description=si:dkeyp-68b7.10 [Source:ZFIN%3BAcc:ZDB-GENE-070912-667]    gene_id=ENSGACG00000015265  logic_name=ensembl  version=1
groupIV ensembl gene    1368026 1374881 .   +   .   ID=gene:ENSGACG00000016447  Name=hnrnpa0b   biotype=protein_coding  description=heterogeneous nuclear ribonucleoprotein A0b [Source:ZFIN%3BAcc:ZDB-GENE-030131-6154]    gene_id=ENSGACG00000016447  logic_name=ensembl  version=1
groupIV ensembl gene    5347339 5349041 .   -   .   ID=gene:ENSGACG00000017010  Name=zgc:153018 biotype=protein_coding  description=zgc:153018 [Source:ZFIN%3BAcc:ZDB-GENE-060929-752]  gene_id=ENSGACG00000017010  logic_name=ensembl  version=1
groupV  ensembl gene    120615  125489  .   +   .   ID=gene:ENSGACG00000002103  Name=zdhhc6 biotype=protein_coding  description=zinc finger%2C DHHC-type containing 6 [Source:ZFIN%3BAcc:ZDB-GENE-030131-3189]  gene_id=ENSGACG00000002103  logic_name=ensembl  version=1
groupVI ensembl gene    11230354    11232784    .   +   .   ID=gene:ENSGACG00000009527  Name=bnip4  biotype=protein_coding  description=BCL2 interacting protein 4 [Source:ZFIN%3BAcc:ZDB-GENE-051113-212]  gene_id=ENSGACG00000009527  logic_name=ensembl  version=1
groupVII    ensembl gene    2271611 2277214 .   +   .   ID=gene:ENSGACG00000019012  Name=sf3b2  biotype=protein_coding  description=splicing factor 3b%2C subunit 2 [Source:ZFIN%3BAcc:ZDB-GENE-070928-1]   gene_id=ENSGACG00000019012  logic_name=ensembl  version=2
groupVII    ensembl gene    15815857    15824549    .   +   .   ID=gene:ENSGACG00000020296  Name=mpp1   biotype=protein_coding  description=membrane protein%2C palmitoylated 1 [Source:ZFIN%3BAcc:ZDB-GENE-031113-4]   gene_id=ENSGACG00000020296  logic_name=ensembl  version=1
groupVII    ensembl gene    17978322    17982388    .   +   .   ID=gene:ENSGACG00000020399  Name=si:ch211-284e13.4  biotype=protein_coding  description=si:ch211-284e13.4 [Source:ZFIN%3BAcc:ZDB-GENE-060526-161]   gene_id=ENSGACG00000020399  logic_name=ensembl  version=1

arquivo_b.tsv

MT  4050
groupIII    7332350
groupIV 5347350
groupVI 11230375
groupVII    17978350

código:

while read -r id pos; do awk -v id="$id" -v pos="$pos" '$1 == id && pos > $4 && pos < $5 { if (gensub(/.*Name=([A-Za-z0-9]*).*/, "\\1", 1) !~ /\s/) print gensub(/.*Name=([A-Za-z0-9]*).*/, "\\1", 1); }' <file_a.tsv; done < file_b.tsv > output.tsv

output.tsv

mt
si
zgc
bnip4

Desired_output

MT  4050    mt-nd2
groupIII    7332350 si:dkeyp-68b7.10
groupIV 5347350 zgc:153018
groupVI 11230375    bnip4
groupVII    17978350    si:ch211-284e13.4
bash shell-script
  • 2 respostas
  • 144 Views
Martin Hope
Age87
Asked: 2018-12-30 13:21:41 +0800 CST

removendo "na" de uma coluna e recolhendo a linha

  • 0

Eu gostaria de remover linhas que têm um "na"

Arquivo

0.000
0.000
0.055
0.036
0.003
0.002
0.000
0.002
0.002
0.002
0.000
na
na
0.000
0.000
na
0.002
0.002
0.003

resultado

0.000
0.000
0.055
0.036
0.003
0.002
0.000
0.002
0.002
0.002
0.000
0.000
0.000
0.002
0.002
0.003

Eu estava tentando fazer isso em R mas não consegui recolher as linhas, basta remover o na

awk sed
  • 3 respostas
  • 2280 Views
Martin Hope
Age87
Asked: 2018-12-29 15:37:05 +0800 CST

Extraia linhas do arquivo_1 com base na correspondência das duas primeiras colunas de um arquivo_2

  • 0

Arquivo_1

##chr   pos rc  allele_count    allele_states   deletion_sum    snp_type    most_variable_allele    diff:1-2    diff:1-3    diff:1-4    diff:1-5    diff:1-6    diff:1-7    diff:1-8    diff:1-9    diff:1-10   diff:1-11   diff:1-12   diff:2-3
MT  227 C   2   C/A 0   pop C   0   0   0   0   0   0   0.024   0   0.022   0   0   0
MT  233 G   2   G/T 0   pop G   0   0.009   0   0.012   0   0   0   0   0   0   0   0.009
MT  245 G   2   G/A 0   pop A   0   0   0   0   0   0.055   0.224   0.072   0.026   0   0   0
MT  251 C   2   C/T 0   pop C   0.276   0.034   0.231   0.005   0.027   0.036   0.025   0.002   0.107   0.034   0.034   0.309
MT  264 G   2   G/C 0   pop G   0   0   0   0.008   0   0.003   0   0   0   0   0   0
MT  286 G   2   G/T 0   pop T   0.002   0.002   0.002   0.002   0.002   0.002   0.002   0.002   0.002   0   0.002   0
MT  292 A   2   A/T 0   pop T   0   0   0   0   0.003   0   0   0.002   0   0   0   0
MT  293 G   2   G/T 0   pop G   0   0   0   0   0.003   0.002   0   0   0   0   0   0
MT  295 G   2   G/T 0   pop G   0   0.002   0.002   0   0.001   0.002   0.002   0.002   0.002   0.002   0.002   0.003

Arquivo_2

MT  251
MT  292
MT  295

saída_desejada

##chr   pos rc  allele_count    allele_states   deletion_sum    snp_type    most_variable_allele    diff:1-2    diff:1-3    diff:1-4    diff:1-5    diff:1-6    diff:1-7    diff:1-8    diff:1-9    diff:1-10   diff:1-11   diff:1-12   diff:2-3
MT  251 C   2   C/T 0   pop C   0.276   0.034   0.231   0.005   0.027   0.036   0.025   0.002   0.107   0.034   0.034   0.309
MT  292 A   2   A/T 0   pop T   0   0   0   0   0.003   0   0   0.002   0   0   0   0
MT  295 G   2   G/T 0   pop G   0   0.002   0.002   0   0.001   0.002   0.002   0.002   0.002   0.002   0.002   0.003

É semelhante ao que se queria neste post: Comparar dois arquivos pela primeira coluna. Manter linhas se corresponder

Eu estava usando awk 'NR==FNR{a[$0]=$0;next}a[$0]'para manter a sobreposição com a primeira coluna, mas preciso da linha inteira quando elas correspondem às duas primeiras colunas (chr e pos).

grep awk
  • 1 respostas
  • 223 Views
Martin Hope
Age87
Asked: 2018-11-01 16:32:10 +0800 CST

Adicione valores de linha de file1 aos cabeçalhos de coluna de file2

  • 0

Quero fazer o contrário do que foi feito aqui: Conversão de linhas para coluna do arquivo

Arquivo1

MT
MT
MT
GROUP1
GROUP1
GROUP2

Arquivo2

FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE FALSE FALSE
FALSE FALSE FALSE FALSE FALSE FALSE

Arquivo de saída

MT MT MT GROUP1 GROUP1 GROUP2 
FALSE FALSE FALSE FALSE FALSE FALSE 
FALSE FALSE FALSE FALSE FALSE FALSE 
FALSE FALSE FALSE FALSE FALSE FALSE 
awk sed
  • 1 respostas
  • 33 Views
Martin Hope
Age87
Asked: 2018-10-15 16:26:01 +0800 CST

Extraia nomes de File_B com intervalos sobrepostos com File_A

  • 1

Dois arquivos delimitados por espaço:

Arquivo_A

MT 50000
groupI 7850000
groupI 7950000
groupI 9050000
groupI 21750000
groupII 8750000
groupII 10550000
groupII 16150000
groupII 20850000
groupIII 14750000
groupIII 15250000
groupIII 15450000
groupIII 15550000
groupIII 15650000
groupIV 7850000

A primeira coluna é o ID do grupo e a segunda coluna é o ponto médio de um intervalo de 100.000 unidades dentro do grupo. Por exemplo, a primeira linha corresponde ao intervalo 1-100000 no grupo MT, a segunda linha ao intervalo 7800000-7900000 e assim por diante.

Arquivo_B

MT 2851 3825 Name=mt-nd1
MT 4036 5082 Name=mt-nd2
MT 5465 7015 Name=mt-co1
MT 7173 7863 Name=mt-co2
MT 8097 8780 Name=mt-atp6
groupI 18791 22890 Name=FGF12
groupI 36880 38991 Name=MB21D2
groupI 65279 68049 Name=cldn15lb
groupI 77722 105198 Name=col4a4
groupI 117583 141390 Name=col4a3
groupI 150455 155401 Name=sst1.1
groupI 9050030 9058000 Name=bco2b
groupI 1076088 1085084 Name=SORL1
groupI 1175505 1181937 Name=abcg4b
groupI 1184288 1184688 Name=lyrm9
groupI 1185206 1186192 Name=ift20

A coluna 1 do arquivo_B é o nome do grupo/cromossomo onde um gene está localizado, as colunas 2 e 3 são os intervalos de um gene, onde a coluna 2 é o início e a coluna 3 é o fim. Finalmente, a coluna 4 é o nome do gene. Eu quero extrair os únicos nomes de genes da 4ª coluna de File_B cujo intervalo esteja dentro do intervalo de 100.000 de File_A.

Arquivo de saída

mt-nd1
mt-nd2
mt-co1
mt-co2
mt-atp6
bco2b

Eu estava usando o código a seguir para um procedimento diferente, embora semelhante (File_B tinha mais colunas e a segunda coluna para File_A era um ponto, não um intervalo).

while read -r id pos; do awk -v id="$id" -v pos="$pos" '$1 == id && pos > $4 && pos < $5 { if (gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1) !~ /\s/) print gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1); }' <File_B.txt; done < File_A.txt > Output_file.txt
awk text-processing
  • 1 respostas
  • 61 Views
Martin Hope
Age87
Asked: 2018-04-24 09:19:54 +0800 CST

Mantendo linhas exclusivas com base nas informações de 2 das três colunas

  • 8

Suponha que você tenha um arquivo como este:

NW_006521251.1  428 84134
NW_006521251.1  511 84135
NW_006521038.1  202 84155
NW_006521038.1  1743 84153
NW_006521038.1  1743 84154
NW_006520495.1  198 84159
NW_006520086.1  473 84178
NW_006520086.1  511 84180

Eu quero manter as linhas exclusivas com base nas colunas 1 e 2 (ou seja, não apenas na coluna dois, pois esse número pode se repetir sob um rótulo diferente na coluna um).

De modo que recebo isso como saída (remove a segunda repetição da NW_006521038.1 1743lista):

    NW_006521251.1  428 84134
    NW_006521251.1  511 84135
    NW_006521038.1  202 84155
    NW_006521038.1  1743 84153
    NW_006520495.1  198 84159
    NW_006520086.1  473 84178
    NW_006520086.1  511 84180

Existe uma maneira de fazer isso com o awk? Usar uniq filenão funciona.

awk uniq
  • 2 respostas
  • 6791 Views
Martin Hope
Age87
Asked: 2018-04-24 07:30:50 +0800 CST

Remova as linhas duplicadas adjacentes enquanto mantém a ordem

  • 15

Eu tenho um arquivo com uma coluna com nomes que se repetem várias vezes cada. Quero condensar cada repetição em uma, enquanto mantenho quaisquer outras repetições com o mesmo nome que não sejam adjacentes a outras repetições com o mesmo nome.

Por exemplo, eu quero virar o lado esquerdo para o lado direito:

Golgb1    Golgb1    
Golgb1    Akna
Golgb1    Spata20
Golgb1    Golgb1
Golgb1    Akna
Akna
Akna
Akna
Spata20
Spata20
Spata20
Golgb1
Golgb1
Golgb1
Akna
Akna
Akna

Isto é o que tenho usado: perl -ne 'print if ++$k{$_}==1' file.txt > file2.txt No entanto, este método mantém apenas um representante da esquerda (ou seja, Golb1 e Akna não são repetidos).

Existe uma maneira de manter nomes exclusivos para cada bloco, mantendo nomes que se repetem em vários blocos não adjacentes?

awk sed
  • 5 respostas
  • 3676 Views
Martin Hope
Age87
Asked: 2018-03-03 18:38:11 +0800 CST

extrair palavras do arquivo usando informações de um subconjunto do arquivo (várias etapas)

  • 0

Eu tenho dois arquivos grandes que se parecem com o seguinte:

Arquivo 1:

NW_006502347.1 316684
NW_006527876.1 351
NW_006502151.1 27628
NW_006526579.1 232
NW_006525259.1 132
NW_006501641.1 437014
NW_006525259.1 378
NW_006523082.1 215
NW_006522424.1 153
NW_006522101.1 815
NW_006521985.1 505
NW_006521985.1 527
NW_006521722.1 920
NW_006521525.1 73
NW_006521432.1 258
NW_006521302.1 938
NW_006521272.1 585
NW_006521272.1 745
NW_006521038.1 202
NW_006519846.1 1528
NW_006519837.1 10215

Arquivo 2:

NW_006502347.1  Gnomon  CDS   305319  305340   .  +  0  ID=cds43608  Parent=rna48098  Dbxref=GeneID:102908761,Genbank:XP_006997436.2  Name=XP_006997436.2  gbkey=CDS  gene=LOC102908761  partial=true  product=histone deacetylase 4-like  protein_id=XP_006997436.2
NW_006501037.1  Gnomon  gene  6936    115174   .  -  .  ID=gene0                      Dbxref=GeneID:102922816  Name=Efl1  gbkey=Gene  gene=Efl1  gene_biotype=protein_coding  partial=true  start_range=.,6936
NW_006501037.1  Gnomon  mRNA  6936    115174   .  -  .  ID=rna0      Parent=gene0     Dbxref=GeneID:102922816,Genbank:XM_006970114.2  Name=XM_006970114.2  gbkey=mRNA  gene=Efl1  model_evidence=Supporting evidence includes similarity to: 5 mRNAs%2C 7 Proteins%2C and 99%25 coverage of the annotated genomic feature by RNAseq alignments%2C including 16 samples with support for all annotated introns  partial=true  product=elongation factor like GTPase 1  start_range=.,6936  transcript_id=XM_006970114.2
NW_006501037.1  Gnomon  exon  115095  115174   .  -  .  ID=id1       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006501037.1  Gnomon  exon  114246  114355   .  -  .  ID=id2       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006502347.1  Gnomon  mRNA  272091  477077   .  +  .  ID=rna48098  Parent=gene26399 Dbxref=GeneID:102908761,Genbank:XM_006997374.2  Name=XM_006997374.2  end_range=477077,.  gbkey=mRNA  gene=LOC102908761  model_evidence=Supporting evidence includes similarity to: 1 mRNA%2C and 90%25 coverage of the annotated genomic feature by RNAseq alignments  partial=true  product=histone deacetylase 4-like  transcript_id=XM_006997374.2
NW_006501037.1  Gnomon  exon  92339   92472    .  -  .  ID=id5       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006501037.1  Gnomon  exon  90969   91106    .  -  .  ID=id6       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006501037.1  Gnomon  exon  89261   89475    .  -  .  ID=id7       Parent=rna0      Dbxref=GeneID:102922816,Genbank:XM_006970114.2  gbkey=mRNA  gene=Efl1  partial=true  product=elongation factor like GTPase 1  transcript_id=XM_006970114.2
NW_006502151.1  Gnomon  exon  26099   27657    .  -  .  ID=id586652  Parent=rna47002  Dbxref=GeneID:102918658,Genbank:XM_006996663.2  gbkey=mRNA  gene=Rftn1  product=raftlin%2C lipid raft linker 1  transcript_id=XM_006996663.2
NW_006501641.1  Gnomon  mRNA  393496  438556   .  +  .  ID=rna40001  Parent=gene21212 Dbxref=GeneID:102913870,Genbank:XM_015986269.1  Name=XM_015986269.1  gbkey=mRNA  gene=LOC102913870  model_evidence=Supporting evidence includes similarity to: 9 mRNAs%2C 5 Proteins%2C and 81%25 coverage of the annotated genomic feature by RNAseq alignments  product=transmembrane protein 189  transcript_id=XM_015986269.1
NW_006501053.1  Gnomon  exon  5104713 5104872  .  +  .  ID=id45206   Parent=rna3590   Dbxref=GeneID:102916769,Genbank:XR_001580019.1  gbkey=misc_RNA  gene=Mycbpap  product=MYCBP associated protein%2C transcript variant X4  transcript_id=XR_001580019.1
NW_006501053.1  Gnomon  exon  5104959 5105062  .  +  .  ID=id45207   Parent=rna3590   Dbxref=GeneID:102916769,Genbank:XR_001580019.1  gbkey=misc_RNA  gene=Mycbpap  product=MYCBP associated protein%2C transcript variant X4  transcript_id=XR_001580019.1
NW_006501053.1  Gnomon  exon  5105698 5105881  .  +  .  ID=id45208   Parent=rna3590   Dbxref=GeneID:102916769,Genbank:XR_001580019.1  gbkey=misc_RNA  gene=Mycbpap  product=MYCBP associated protein%2C transcript variant X4  transcript_id=XR_001580019.1
NW_006501053.1  Gnomon  exon  5106131 5106246  .  +  .  ID=id45209   Parent=rna3590   Dbxref=GeneID:102916769,Genbank:XR_001580019.1  gbkey=misc_RNA  gene=Mycbpap  product=MYCBP associated protein%2C transcript variant X4  transcript_id=XR_001580019.1

Desejo usar as informações do arquivo 1 para extrair a palavra seguinte "gene=" na coluna 13 ou 14 (por exemplo, "Efl1"). Mais especificamente, quero:

Etapa 1) Compare os rótulos da coluna 1 do arquivo 1 (por exemplo, NW_006527876.1) com os rótulos da coluna 1 do arquivo 2, extraia todas as linhas para as quais a coluna 1 (arquivo 2) corresponde à coluna 1 do arquivo 1.

Como você pode ver, os rótulos da coluna 1 (arquivo 2) se repetem, portanto, haverá várias correspondências para cada rótulo do arquivo 1.

As colunas 4 e 5 do arquivo 2 representam um intervalo, sendo a coluna 4 o início e a coluna 5 o final do intervalo. A coluna 2 do arquivo 1 representa os números entre esses intervalos.

Etapa 2) Das linhas isoladas da etapa 1, extraia as linhas para as quais o número na coluna 2 (arquivo 1) está entre o intervalo indicado pela coluna 4 e 5 do arquivo 2.

Isso está muito além do que eu sei, mas abaixo está uma ideia de como os comandos podem ser.

awk '{ print $1 }' file 1 |  
awk `$4 *(file2)* < $2 *(file1)*' | awk '$5 *(file2)* > $2 *(file1)*' > output.tsv

A saída deve ter linhas com rótulos exclusivos na coluna 1.

Etapa 3) Do arquivo output.tsv criado acima, gostaria de extrair a palavra que segue o sinal de igual em "gene=" na coluna 13 ou 14 (veja abaixo), de forma que acabe com um arquivo apenas com as palavras seguindo o sinal de igual.

Arquivo de saída final (com base neste exemplo):

LOC102908761
Rftn1
LOC102913870

RESPONDA:

while read -r id pos; do awk -v id="$id" -v pos="$pos" '$1 == id && pos > $4 && pos < $5 { if (gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1) !~ /\s/) print gensub(/.*gene=([A-Za-z0-9]*).*/, "\\1", 1); }' < file2.txt; done <file1.txt > gene_hits.txt

Em seguida, para se livrar de replicações (mesmo locus em vários intervalos), mantendo diferentes loci mapeados para o mesmo gene, faça:

perl -ne 'print if ++$k{$_}==1' A_gene_hits.txt > A_genes.txt
awk sed
  • 1 respostas
  • 539 Views
Martin Hope
Age87
Asked: 2018-01-25 11:49:54 +0800 CST

extrair colunas da matriz TRUE/FALSE com base na proporção de valores TRUE dentro da coluna

  • 2

Eu tenho um arquivo de texto como o abaixo, embora com quase muitas colunas. Desejo extrair nomes de colunas que tenham uma proporção/número específico de valores TRUE, por exemplo, colunas com TRUE em 2 das 9 linhas (com valores TRUE/FALSE).

Como alternativa, seria bom extrair colunas com pelo menos um certo número (por exemplo, 2) de valores VERDADEIROS. No exemplo acima, seriam colunas com 2 a 9 linhas possíveis com valores TRUE. Deve ser generalizável para arquivos com diferentes números de linhas.

Obrigado!

Exemplo de arquivo de entrada:

Comparison  MT  group1  group1.1    group1.2    group1.3    group1.4    group1.5    group1.6    group1.7    group1.8    group1.9
BP:HA      FALSE FALSE  FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE        TRUE
CB:HA      FALSE TRUE   FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE        FALSE 
HA:PI      TRUE  TRUE   FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE        FALSE 
AL:GR      FALSE FALSE  FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE        FALSE 
AL:LA      TRUE  FALSE  FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE        FALSE 
AL:PL      FALSE FALSE  FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       TRUE         FALSE 
GR:PP      FALSE FALSE  FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE        FALSE 
LA:PP      TRUE  FALSE  FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE        TRUE
PL:PP      FALSE FALSE  FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE       FALSE        TRUE

Resultado desejado para colunas com 2 ou mais valores TRUE :

arquivo de saída:

MT
group1
group1.9
bash text-processing
  • 3 respostas
  • 340 Views

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve