gpt4 book ai didi

bash - 如果特定列之后超过 60% 或更多的列包含相同的特定值,我该如何删除整行?

转载 作者:行者123 更新时间:2023-11-29 09:29:12 25 4
gpt4 key购买 nike

我有一个非常大的制表符分隔文件,格式如下(大约有 300 列和 120 万行)。在第 4 列之后,所有列的格式都相同(只是数字不同,但都使用 #/#./. 格式)

标题似乎太长导致外观有点偏移

CHROM   POS     REF     ALT     LarsenP1_1_PI173627.sort        LarsenP1_1_PI173630.sort        LarsenP1_1_PI204384.sort        LarsenP1_1_PI204386.sort        LarsenP1_1_PI204550.sort
1J_LG1 393466 A [C] ./. 1/2 1/1 0/0 0/1
1J_LG1 393472 G [A, C] 5/6 ./. ./. 1/0 0/0
1J_LG1 393475 G [A] ./. ./. ./. ./. ./.
1J_LG1 393482 T [C] 0/0 1/1 1/2 2/2 ./.
1J_LG1 393762 A [C] 0/0 ./. ./. 2/2 ./.

我正在尝试删除第 4 列之后每列中 60% 或更多值为 ./. 的所有行(不包括第 4 列,因此第 5 列及以后)。基本上在上面的示例中,第 3 行和第 5 行将被删除。它应该产生如下所示的输出。

CHROM   POS     REF     ALT     LarsenP1_1_PI173627.sort        LarsenP1_1_PI173630.sort        LarsenP1_1_PI204384.sort        LarsenP1_1_PI204386.sort        LarsenP1_1_PI204550.sort
1J_LG1 393466 A [C] ./. 1/2 1/1 0/0 0/1
1J_LG1 393472 G [A, C] 5/6 ./. ./. 1/0 0/0
1J_LG1 393482 T [C] 0/0 ./. ./. 2/2 ./.

我对编程和生物信息学还很陌生,非常感谢您的帮助。通过一些研究,我认为我应该使用 awksed 之类的东西,但我不确定。

另外,如果格式不佳,我深表歉意。

最佳答案

由于 ./.0/0 只出现在 #4 之后的字段中,并且始终是完整字段,因此您只需要:

$ awk -F'\t' 'gsub(/\.\/\./,"&") < ((NF-4)*.6)' file
CHROM POS REF ALT LarsenP1_1_PI173627.sort LarsenP1_1_PI173630.sort LarsenP1_1_PI204384.sort LarsenP1_1_PI204386.sort LarsenP1_1_PI204550.sort
1J_LG1 393466 A [C] ./. 1/2 1/1 0/0 0/1
1J_LG1 393472 G [A, C] 5/6 ./. ./. 1/0 0/0
1J_LG1 393482 T [C] 0/0 1/1 1/2 2/2 ./.

$ awk -F'\t' 'gsub(/\.\/\.|0\/0/,"&") < ((NF-4)*.6)' file
CHROM POS REF ALT LarsenP1_1_PI173627.sort LarsenP1_1_PI173630.sort LarsenP1_1_PI204384.sort LarsenP1_1_PI204386.sort LarsenP1_1_PI204550.sort
1J_LG1 393466 A [C] ./. 1/2 1/1 0/0 0/1
1J_LG1 393482 T [C] 0/0 1/1 1/2 2/2 ./.

关于bash - 如果特定列之后超过 60% 或更多的列包含相同的特定值,我该如何删除整行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55657035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com