AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / user-213707

Age87's questions

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

基于字符串提取字段(部分和精确)

  • 1

Expertos:我想根据字符串(部分和精确)提取字段。在某些行中,这些字段移动了一列或两列,因此我无法指定列(这是我的知识范围)。我还需要提取第 1、第 2、第 4 和第 5 个字段,但这些字段不会因行而异,所以我可以自己做。

具体来说,我想提取具有部分字符串“ DP4= ”的字段和具有匹配字符串(如“ MODERATE ”)的字段加上左侧和右侧的字段:

输入:

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

所需的输出(制表符分隔符):

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

谢谢!

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

for循环简化

  • 0

我想了解下面的 for 循环,也许可以简化它。例如,我想连接目录中每个样本的 rem 文件。

文件:

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

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

我可以在不列出清单的情况下这样做吗?做什么的cut -f 1 -d?如果文件名的一部分在列表中的两者之间,为什么会cat $i.rem.1.fq起作用但不起作用?这是否意味着它捕获了之前的所有内容(例如file1)?cat $i.1.fqrem**rem*

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

添加两个带字母的字段,在字段 4 和 5 中编码为冒号分隔的数字

  • 0

我想创建一个第 8 和第 9 字段/列,并在第 4 列和第 5 列中将适当的字母编码为数字。六个冒号分隔的数字对应于A:T:C:G:N:del

注意:第 6 列和第 7 列中的某些行是空的,我通过插入 NA 来修复:

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

然后再次使用制表符分隔文件sed -e 's/ /\t/g'

文件.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

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

任何帮助是极大的赞赏!!

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

通过匹配前两列将列添加到适当的行

  • 0

我想使用每个文件的前两列将来自 fil2、file3 和 file4 的附加列添加到 file1 的适当行(前两列匹配的位置)。File2 有三列要添加到 file1,但所有其他文件只有一列要添加,最后一列。

条目NW_456 44和NW_987 75未在 file3 中注释,因此丢失。我想在该特定列的输出文件中将其保留为空(实际上没有说“空”)。

例子:

文件 1

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

文件2

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

文件 3

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

文件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

输出文件

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

与此问题类似:根据第二列的匹配添加列

任何帮助表示赞赏!

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

计算字段中 TRUE 的数量,报告字段编号、TRUE 的数量和标签(大或小)计数

  • 2

我有在 Linux 机器上运行的代码,它计算在给定列/字段中找到的 TRUES 的数量,将列号和该列中的 TRUE 数量打印为输出。

在新输入中,行(输入中的最后一列)被分配为“大”或“小”(每行三个)。

我想用 2 个或更多 TRUE 计算每列的“小”和“大”的数量。

查找具有 2 个或更多 TRUE 的列的代码(我知道下面的代码忽略输入的第一列):

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

输入.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

输出.tsv:

(第一列:列号;第二列:TRUE 数)

3 3
6 3
9 2
10 2

新输入.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

所需的输出.tsv:

(第三列:分配为小的 TRUE 数;第四列:分配为大的 TRUE 数)

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

非常感谢任何 linux 向导的帮助!

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

从 file_1 中提取所有行,除了前两列与 file_2 中前两列匹配的行

  • 0

我想做与此相反的操作(完全相同的示例): 根据匹配来自 file_2 的前两列从 file_1 中提取行

也就是说,从 file_1 中提取除前两列与 file_2 中前两列匹配的行之外的所有行。

回答:

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

使用 file_b 中 2 列的信息从 file_a 中提取名称

  • 1

建立在:从 File_B 中提取与 File_A 有重叠间隔的名称

我想通过将file_b的第一列与file_a匹配来提取基因名称(通常是第10列,“Name =”之后的内容),如果file_b的第二列位于基因区间内,则提取基因名称,由第4列和file_b 的 5 个。第一列必须匹配,这样我每行只能得到一个基因(file_b),但理论上我可以让多个相邻行(column_b)匹配同一个基因(例如,如果 file_b 中的第二行是MT 4065)

我现在的代码有一些问题。

(1) 按照下面的设置方式,file_b 的最后一行从输出中丢失,尽管如果此行 ( groupVII 17978350) 出现在列表中,情况会发生变化。我希望它按照设置的方式工作。

(2) 如果名称包含特殊字符(例如冒号和连字符),则名称将被截断。我想在等号后面加上全名。

(3) 我想将 file_b 的条目/行与输出中的基因匹配匹配,这样前两列是条目,第三列是基因匹配。

文件_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

文件_b.tsv

MT  4050
groupIII    7332350
groupIV 5347350
groupVI 11230375
groupVII    17978350

代码:

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

输出.tsv

mt
si
zgc
bnip4

所需输出

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 个回答
  • 144 Views
Martin Hope
Age87
Asked: 2018-12-30 13:21:41 +0800 CST

从列中删除“na”并折叠行

  • 0

我想删除具有“na”的行

文件

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

输出

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

我试图在 R 中执行此操作,但我无法折叠行,只需删除 na

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

根据匹配 file_2 的前两列从 file_1 中提取行

  • 0

文件_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

文件_2

MT  251
MT  292
MT  295

期望输出

##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

它类似于这篇文章中想要的:按第一列比较两个文件。如果匹配则保留行

我awk 'NR==FNR{a[$0]=$0;next}a[$0]'用于保持与第一列的重叠,但是当它们与前两列(chr 和 pos)匹配时,我需要整行。

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

将 file1 的行值添加到 file2 的列标题

  • 0

我想做与这里所做的相反的事情:Rows to column conversion of file

文件 1

MT
MT
MT
GROUP1
GROUP1
GROUP2

文件2

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

输出文件

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 个回答
  • 33 Views
Martin Hope
Age87
Asked: 2018-10-15 16:26:01 +0800 CST

从与 File_A 具有重叠间隔的 File_B 中提取名称

  • 1

两个空格分隔的文件:

文件_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

第一列是组 ID,第二列是组内 100,000 个单位长的间隔的中点。例如,第一行对应于 MT 组中的区间 1-100000,第二行对应于区间 7800000-7900000,依此类推。

档案_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

File_B的第一列是一个基因所在的组/染色体名,第二列和第三列是一个基因的区间,其中第二列是开始,第三列是结束。最后,第 4 列是基因名称。我想从 File_B 的第 4 列中提取其间隔落在 File_A 的 100,000 间隔内的唯一基因名称。

输出文件

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

我将以下代码用于不同但相似的过程(File_B 有更多列,File_A 的第二列是一个点而不是一个间隔)。

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 个回答
  • 61 Views
Martin Hope
Age87
Asked: 2018-04-24 09:19:54 +0800 CST

根据三列中的两列的信息保持唯一的行

  • 8

假设你有一个这样的文件:

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

我想保留基于第 1 列和第 2 列的唯一行(即不仅仅是第 2 列,因为该数字可能在第 1 列的不同标签下重复)。

这样我得到这个作为输出(NW_006521038.1 1743从列表中删除第二个重复):

    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

有没有办法用 awk 做到这一点?使用uniq file不起作用。

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

在保持顺序的同时删除相邻的重复行

  • 15

我有一个文件,其中有一列名称重复多次。我想将每个重复压缩为一个,同时保留与其他同名重复不相邻的任何其他同名重复。

例如我想把左边转到右边:

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

这是我一直在使用的:perl -ne 'print if ++$k{$_}==1' file.txt > file2.txt 但是,这种方法只保留了左边的一个代表(即Golb1和Akna不重复)。

有没有办法为每个块保留唯一名称,同时保留在多个不相邻块中重复的名称?

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

使用文件子集中的信息从文件中提取单词(多个步骤)

  • 0

我有两个大文件,如下所示:

文件 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

文件 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

我想使用文件 1 中的信息来提取第 13 或 14 列下“gene=”后面的单词(例如“Efl1”)。更具体地说,我想:

步骤 1)比较文件 1 中第 1 列的标签(例如 NW_006527876.1)与文件 2 中第 1 列的标签,提取第 1 列(文件 2)与文件 1 的第 1 列匹配的所有行。

如您所见,第 1 列(文件 2)的标签重复,因此文件 1 的每个标签都会有多个匹配项。

文件 2 的第 4 列和第 5 列代表一个区间,第 4 列是区间的开始,第 5 列是区间的结束。文件 1 的第 2 列表示这些间隔之间的数字。

步骤 2) 从步骤 1 中分离出来的行中,提取第 2 列(文件 1)下的编号位于文件 2 的第 4 列和第 5 列表示的区间之间的行。

这远远超出了我所知道的范围,但下面是关于命令可能是什么样子的想法。

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

输出应该在第 1 列下具有具有唯一标签的行。

第 3 步)从上面创建的 output.tsv 文件中,我想提取第 13 列或第 14 列(见下文)下“gene=”中等号后面的单词,这样我就得到了一个文件用等号后面的词。

最终输出文件(基于此示例):

LOC102908761
Rftn1
LOC102913870

回答:

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

接下来要去除重复(多个间隔中的相同基因座)同时保持不同基因座映射到同一基因,请执行以下操作:

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

根据列中 TRUE 值的比例从 TRUE/FALSE 矩阵中提取列

  • 2

我有一个像下面这样的文本文件,尽管它有很多列。我想提取具有特定比例/数量的 TRUE 值的列名,例如 9 行中有 2 行具有 TRUE 的列(具有 TRUE/FALSE 值)。

或者,最好提取具有至少一定数量(例如 2)的 TRUE 值的列。在上面的示例中,它将是具有 TRUE 值的 2 到可能的 9 行的列。应该可以推广到具有不同行数的文件。

谢谢!

输入文件示例:

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

具有 2 个或更多 TRUE 值的列的期望结果:

输出文件:

MT
group1
group1.9
bash text-processing
  • 3 个回答
  • 340 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

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

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve