Awk 包含55000行*1800列的大型文件-只需删除包含部分行的特定列

Awk 包含55000行*1800列的大型文件-只需删除包含部分行的特定列,awk,Awk,我有一个巨大的文件(癌症基因表达数据-~2gbs.csv文件),有55000行~1800列。所以我的桌子看起来像这样: TCGA-4N-A93T-01A-11R-A37K-07, **TCGA-5M-AAT4-11A-11R-A41B-07**, TCGA-5M-AATE-01A-11R-A41B-07, TCGA-A6-2677-01B-02R-A277-07, **TCGA-A6-2677-11A-01R-0821-07** 例如,在列TCGA-5M-AAT4-11

我有一个巨大的文件(癌症基因表达数据-~2gbs.csv文件),有55000行~1800列。所以我的桌子看起来像这样:

TCGA-4N-A93T-01A-11R-A37K-07, **TCGA-5M-AAT4-11A-11R-A41B-07**,     TCGA-5M-AATE-01A-11R-A41B-07,   TCGA-A6-2677-01B-02R-A277-07,   **TCGA-A6-2677-11A-01R-0821-07**    
例如,在列
TCGA-5M-AAT4-11A-11R-A41B-07中,我在第四个位置有
-11A
,现在我的问题是我必须删除第四个位置有
-11A
的整列(
xx-xx-xx-11A-xx-xx
)。这必须搜索所有1800列,并仅将没有
-11A
的列保留在第四个位置

您能帮助我使用什么命令来获取所需的数据吗。
我是一名生物学家,在编码方面经验有限

编辑:
我有一个从1800名乳腺癌患者收集的数据文件,表格中有55000个基因名称作为行,1800个样本作为列。(55000*1800矩阵文件)我们实验室设计的样本很少有问题,我们必须从分析中删除这些样本。现在,我已经确定了这些示例,并希望将它们从我的file1.csv中删除。xx-xx-xx-11A-xx-xx-xx-xx是故障样本,我只需要识别这些样本并将其从.csv文件中删除。在列名的第四位显示11A的示例。我可以在R中执行此操作,但这对我来说太长了。提前感谢,很抱歉打扰您。

不确定您真正想要的是什么,此脚本将逐行删除第4位有“11A”的字段(基于
-
delim)


$awk-F',*'-vofs=','{for(i=1;i不确定您真正想要什么,此脚本将逐行删除第4位有“11A”的字段(基于
-
delim)

$awk-F',*'-vofs=','{for(i=1;i试试这个

#! /usr/local/bin/gawk -f
# blacklist_columns.awk
# https://stackoverflow.com/questions/49578756

# i.e. TCGA-5M-AAT4-11A-11R-A41B-07
BEGIN{
    PATTERN="TCGA-..-....-11A-...-....-.."
}
$0 ~ ".*" PATTERN ".*"{ # matches rows with the pattern
    for(col=1;col<=NF; col++)
        # find column(s) in the row with the patten
        if($col ~ PATTERN){
            blacklist[col]++   # note which column
        }
}

END{ # output the list collected
    n = asorti(blacklist)
    for(i=1;i<=n;i++)
        bl=bl "," blacklist[i]
    print substr(bl, 2)
}

# Usage try ... :
#  BLACKLIST=blacklist_columns.awk table.tab
#
#  cut --complement -f $BLACKLIST table.tab > table_purged.tab
!/usr/local/bin/gawk-f
#黑名单_columns.awk
# https://stackoverflow.com/questions/49578756
#即TCGA-5M-AAT4-11A-11R-A41B-07
开始{
PATTERN=“TCGA-..-..-11A-..-..-11A”
}
$0~“*”模式“.*”{#将行与模式匹配
对于(col=1;col试试这个

#! /usr/local/bin/gawk -f
# blacklist_columns.awk
# https://stackoverflow.com/questions/49578756

# i.e. TCGA-5M-AAT4-11A-11R-A41B-07
BEGIN{
    PATTERN="TCGA-..-....-11A-...-....-.."
}
$0 ~ ".*" PATTERN ".*"{ # matches rows with the pattern
    for(col=1;col<=NF; col++)
        # find column(s) in the row with the patten
        if($col ~ PATTERN){
            blacklist[col]++   # note which column
        }
}

END{ # output the list collected
    n = asorti(blacklist)
    for(i=1;i<=n;i++)
        bl=bl "," blacklist[i]
    print substr(bl, 2)
}

# Usage try ... :
#  BLACKLIST=blacklist_columns.awk table.tab
#
#  cut --complement -f $BLACKLIST table.tab > table_purged.tab
!/usr/local/bin/gawk-f
#黑名单_columns.awk
# https://stackoverflow.com/questions/49578756
#即TCGA-5M-AAT4-11A-11R-A41B-07
开始{
PATTERN=“TCGA-..-..-11A-..-..-11A”
}
$0~“*”模式“.*”{#将行与模式匹配

对于(col=1;col不幸的是,正如所写的,这是非常广泛的。修改csv的方法可能很多。请注意,您可能需要创建一个新的csv,并过滤掉您的特定数据。csv文件实际上不是为实时更新而设置的(与数据库或电子表格不同)。我们不需要如此广泛的样本数据集来帮助您解决问题。此外,如果您添加另一条应跳过处理的“记录”,然后包含两条样本“记录”中所需的输出,则会更好。(您的数据是否已在上面正确编辑,以便有一个单独的行,或者这些数字只是您表示字段的方式?)如果是这样,也许
--1------------2------------
将更有助于说明您的问题。祝您好运。逗号在哪里?(
)如果它确实是以制表符分隔的数据,(我认为更好),然后将选项卡转换为
|
字符(至少在示例数据中)所以字段是清晰可见的。祝你好运。哦,很抱歉那篇不好的帖子。我希望它不会冒犯你太多。我会删除它。到底为什么人们有想法否决它呢?人们,莱伊我解释。这家伙研究癌症。他的工作可能比你一生中做过的任何事情都更有益于人类,更残酷地说。补充nally,他诚实地承认自己的经验非常有限。还有一些过于聪明的家伙因为他没有达到他们的期望而否决了他。天啊。不幸的是,正如所写的,这是非常广泛的。修改csv的方法可能很多。只需注意,你可能需要创建一个新的csv,并过滤掉你的特定数据。csv文件不是免费的使用为实时更新设置的内容(与数据库或电子表格不同)。我们不需要如此广泛的示例数据集来帮助您解决问题。此外,如果您添加另一条应在处理过程中跳过的“记录”,然后包含两条示例“记录”中所需的输出,则效果会更好。(您的数据是否已在上面正确编辑,以便有一个单独的行,或者这些数字只是您表示字段的方式?)如果是这样,也许
--1------------2------------
将更有助于说明您的问题。祝您好运。逗号在哪里?(
)如果它确实是以制表符分隔的数据,(我认为更好),然后将选项卡转换为
|
字符(至少在示例数据中)所以字段是清晰可见的。祝你好运。哦,很抱歉那篇不好的帖子。我希望它不会冒犯你太多。我会删除它。到底为什么人们有想法否决它呢?人们,莱伊我解释。这家伙研究癌症。他的工作可能比你一生中做过的任何事情都更有益于人类,更残酷地说。补充纳利,他诚实地承认自己的经验非常有限。有一些过于聪明的家伙因为他没有达到他们的期望而否决了他。耶稣。当心场分隔符中的模式。不是所有的世界都是有GNU awk的系统。当心场分隔符中的模式。不是所有的世界都是有GNU awk的系统。