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

DN1's questions

Martin Hope
DN1
Asked: 2020-02-07 03:37:56 +0800 CST

如何根据另一个文件的多个条件选择文件行?

  • 2

我有 2 个基因数据集。我根据 file2 中的列过滤 file1。但是,我还需要考虑 file2 中的第二列,我不知道该怎么做。

文件 1 行提取的条件是仅选择染色体位置比文件 2 中位于同一染色体上的行中的任何给定染色体位置大于 5000 或小于 5000 的行。我在下面的代码中运行了其中的一部分,但这并不仅仅考虑相同染色体编号内的过滤行。

例如,我的数据如下所示:

文件 1:

Variant   Chromsome   Chromosome Position  
Variant1      2             14000     
Variant2      1             9000              
Variant3      8             37000          
Variant4      1             21000     

文件 2:

Variant  Chromosome  Chromosome Position  
Variant1     1                 10000                   
Variant2     1                 20000                   
Variant3     8                 30000                   

预期输出(与同一染色体上文件 2 的任何行相比,位置距离大于 +/-5000 的变体):

Variant   Chromosome Position     Chromosome
Variant1    14000                  2
Variant3    37000                  8

#Variant1 at 14000, whilst within 5000 + of Variant1 at 10000 in file2 is on a different chromosome and therefore not compared and is kept.
#Variant3 is on the same chromosome as Variant4 in file1 but larger than 5000+ distance and is kept.

我使用上一个问题(如何根据另一个文件的条件从文件中选择行?)的答案进行编码,询问如何在不考虑染色体的情况下进行过滤:

awk '
NR == FNR       {RGMIN[++IX] = $2 - 5000                        
                 RGMAX[IX]   = $2 + 5000                        
                 next
                }
FNR == 1        {print                                         
                 next
                }
                {PR = 1                                         

                 for (i=2; i<=IX; i++)  PR = PR * ($3 < RGMIN[i] || $3 > RGMAX[i])                                                                                          
                }
PR                                                             
' file2 file1 > newfile.txt

我一直在尝试更好地理解语法,以便在附加行中添加一条 if 语句,用于“如果 file1 的行具有与 file2 匹配的染色体编号,则仅在该染色体编号内执行 5000 +/- 过滤”,但我如果有另一种方法,我不知道如何将它融入我所拥有的东西中。

编辑:

现在尝试添加 CHROM:

awk '
NR == FNR       {RGMIN[++IX] = $2 - 500000                        
                 RGMAX[IX]   = $2 + 500000  
                 CHROM[IX] = $2              
                 next
                }
FNR == 1        {print                                         
                 next
                }
                {PR = 1                                         
                 for (i=2; i<=IX; i++) if ($2 == CHROM[i]) PR = PR * ($2 < RGMIN[i] || $2 > RGMAX[i])                                              
                }
PR          
' file2 file1 > newfile.txt               
linux awk
  • 2 个回答
  • 299 Views
Martin Hope
DN1
Asked: 2020-02-06 10:32:56 +0800 CST

如何根据另一个文件的条件从一个文件中选择行?

  • 1

我有 2 个遗传数据集,都有一个染色体位置列。我正在尝试根据每行的染色体位置与文件 2 中的染色体位置相比来过滤文件 1。文件 1 行提取的条件是只有染色体位置大于 5000 或小于 5000 的行选择文件 2 的所有行中的任何给定染色体位置。最终,我试图确保我从文件 1 中提取的那些遗传变异比文件 2 中的那些具有大于 5000 +/- 的距离。

例如,我的数据如下所示:

文件 1:

Variant   Chromosome Position
Variant1    14000
Variant2    9000
Variant3    37000
Variant4    21000

文件 2:

Variant   Chromosome Position
Variant1    10000
Variant2    20000
Variant3    30000

预期输出(与文件 2 的每一行相比,位置距离大于 5000 的变体):

Variant   Chromosome Position
Variant3    37000

我发现从 2 个文件中提取数据的问题,但取决于匹配或 unqiue。我还没有找到应用 +/- 条件来解决我的问题的东西,而且我不确定在哪里可以查看/学习。我是 linux 新手,所以我一直在尝试构建一个具有以下效果的命令:

awk 'BEGIN{FS=OFS="\t"} FNR==1{print;next} {if($2>=+5000 | $2<=-5000) print $0}' file1 file2 > newfile

但我不确定让这个工作的语法 - 任何帮助或指导将不胜感激。

linux awk
  • 1 个回答
  • 124 Views
Martin Hope
DN1
Asked: 2020-02-01 02:57:56 +0800 CST

如何查找和计算两个文件中 ID 列的匹配数据?

  • 2

我有两个具有匹配染色体位置 ID 的遗传数据集。我想计算文件 1 的染色体位置 ID 出现在文件 2 中的次数。

例如,我的数据如下所示:

文件 1(染色体位置实际上是我的第 125 列,由 暗示...):

Gene  pval    ... Chromosome position ID
ACE   0.002   ... 01:3290834_CT_C_1
NOS   0.01    ... 03:3304593_GA_G_1
BRCA  0.004 . ... 06:6265733_GA_G_1
CYP3  0.34    ... 09:9433933_GA_G_1

文件 2(染色体位置是我的第一列):

Chromosome position ID  Gene  pval
01:1243933_GA_G_1       ACE   0.002
03:3304593_GA_G_1       NOS   0.01
06:6265733_GA_G_1       BRCA  0.004
09:9433933_GA_G_1       CYP3  0.34

我发现很多问题都给出了匹配行的提取,并根据这些问题应用了代码,但我只想获得两个文件之间匹配染色体位置的计数。

目前我正在使用:

awk -F'|' 'NR==FNR{c[$125]++;next};c[$125]' file2.csv file1.txt > file3.txt

wc -l file1.txt
wc -l file3.txt

文件 1 和 3 的行数与我期望的不完全匹配(我希望所有文件 1 都在文件 2 中)并且为了确定发生了什么我需要找到一种方法来执行匹配计数染色体位置列中的行。如果我能找到一种方法来编码“文件 1 的所有染色体位置是否都匹配/出现在文件 3 中?” 这将是理想的,但即使只是计数现在也有效。

所以输出将是一个数字,计算文件 1 中染色体位置列 $125 与文件 2 染色体位置列 $1 匹配的次数。

我正在使用 Linux。

awk wc
  • 2 个回答
  • 425 Views
Martin Hope
DN1
Asked: 2020-01-29 01:58:02 +0800 CST

如何使用 awk 选择和提取匹配数据?

  • 3

我有文件 1,它只包含一列是基因列表,文件 2 有更长的基因列表和基因的统计数据。我正在尝试查找与文件 1 中的基因匹配的统计数据并将其放入新文件 3 中。在特定文件 2 中有 33 列,我想要的唯一统计数据在第 29 列中,但是我目前一直在写为每一列查找文件 1 基因信息的代码,因为我仍然坚持这一点。

例如,我的数据如下所示:

文件 1:

Gene
ACE
BRCA
HER.2
NOS
P53
PTGIS

文件 2:

gene_id   Gene    pval    beta    maf    ...     qval   ...
12345     ACE     0.01    300     100            0.0008
67890     UMOD.1  0.002   400     45             0.047
00008     HER.2   0.02    123     98             0.56
34587     CICP3   0.05    55      12             0.77
67859     HER     0.003   600     33             0.234

我想要的第 29 列是qval,并且我曾经在第 29...列之前和之后暗示更多列,但是我对 stackexchange 没有经验,如果有办法让我完整地提供更大的数据以获得更好的示例,请告诉我,我会立即去做。

使用这些示例数据集,输出文件 3 将如下所示:

Gene   qval
ACE    0.0008
HER.2  0.56

我已经尝试过我认为会给我这两个匹配基因的所有列的代码,它目前给我一个空的输出文件:

awk 'BEGIN{FS=OFS="\t"} {sub(/\.[0-9]+$/,"",$2)} FNR==NR{$30="";sub(/[[:space:]]+$/,"");a[$2]=$0;next} $1 in a{print a[$2],$NF}' file2.txt   file1.txt > file3.txt

我还尝试了另一种方法,更具体地说是获取第 29 列,该列运行但输出匹配只给出我的一些匹配基因数据,而其他应该有匹配数据的则留下“NA”:

awk '{printf("%s\t%s\n", $2, $29)}' originalfile2.txt > file2.txt

awk '{
    split($1,k,".")         
}
NR==FNR {
    a[k[1]]=$1              
    next
}
k[1] in a {                 
    print $0 "\t" a[k[1]]   
}'  file1.txt file2.txt  > file3.txt

awk '{$3=""; print $0}' file3.txt | column -t > file3.txt 
sed -e '1i\Gene \ qval' file3.txt | column -t > file3.txt
linux awk
  • 1 个回答
  • 399 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