Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用bash或python有选择地删除列和行_Bash_Shell_Awk - Fatal编程技术网

如何使用bash或python有选择地删除列和行

如何使用bash或python有选择地删除列和行,bash,shell,awk,Bash,Shell,Awk,更新 我怀疑我最初输入的输入和期望的输出数据与我在空白方面的输入和期望的输出数据不完全相同。我现在已经输入了新的输入数据和期望的输出数据 我目前有一个如下所示的数据集: cut -d '\t' -f 1,3,4,5,2,6 输入 【代码>代码>杂交参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考(TCGA)的“13-13-5-5-5-5-5-5

更新

我怀疑我最初输入的输入和期望的输出数据与我在空白方面的输入和期望的输出数据不完全相同。我现在已经输入了新的输入数据和期望的输出数据

我目前有一个如下所示的数据集:

cut -d '\t' -f 1,3,4,5,2,6
输入

【代码>代码>杂交参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考参考(TCGA)的“13-13-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5-5 A409-051)A(4)A409-5-5-5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 5 5 5 5 5 5 5 5 5 5 5 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 11D-A409-05 TCGA-5X-AA5U-01A-11D-A409-055)A(11)A(11)A(11)A(11)A(11)A(11)D(11)A(10)A(10)A(10)A(10)A(9)5)T(5)A(5)T(5)T(5)T(5)A(5)A(5)A(5)A(5)A(5)A(4)A(4)A)A(4)A(4)A(5)9)A(5)A(5)A(5)5)A(5)A(5)5)5)A(5)A(5)A(5)A(5)A(5)5)A(5)5)5)A(5)5)A(5)5)A(5)5)5)A(5)5)A(5)5)A(5)5)A(5)5)5)5)A(5)5)A(5)5)5)5)A(5)5 Q-01A-11D-A409-05TCGA-OY-A56Q-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-VG-A8LO-01A-11D-A409-05 TCGA-WR-A838-01A-01A-01A-12A-WR-A838-01A-12D-A838-A838-01A-01A-01A-01A-10D 复合元素参考β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标β值基因Symbol染色体基因组坐标 cg00000029 0.162232896986279 RBL2 16 53468112 0.191627667901702 RBL2 16 53468112 0.0712181967886229 RBL2 16 53468112 0.0797617926225958 RBL2 16 53468112 0.134907151266991 RBL2 16 53468112 0.0541415985613948 RBL2 16 53468112 0.08985792345672 RBL2 16 53468112 0.0378656345129 RBL21653468112 0.0681542463965581 RBL21653468112 0.101053013486289 RBL21653468112 cg00000108 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 NA C3orf35 3 37459206 CG0000109 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 NA FNDC3B 3 171916037 数据集要大得多,大小接近10GB。例如,在R中太大而无法实现

然而,许多列实际上是重复的。例如,我只需要保留标题为(第二行)
Gene\u Symbol
chromo
Genomic\u Coordinate
的每一列。单个
Beta_值
列需要保留,因为它们对于每个样本都不同。示例ID位于第一行。因此,上述要求的输出示例如下:

所需输出

hybrization REF Gene_Symbol染色体基因组坐标TCGA-13-A5FT-01A-11D-A409-05 TCGA-13-A5FU-01A-11D-A409-05 TCGA-29-A5NZ-01A-11D-A409-05 TCGA-3P-A9WA-01A-11D-A409-05 TCGA-59-A5PD-01A-11A-11D-A409-05 TCGA-5X-AA5U-01A-11D-A409-05 TCGA-OY-A56P-01A-01A-12D-05TCGA-VG-A8LO-01A-11D-A409-05 TCGA-WR-A838-01A-12D-A409-05
cg00000029 RBL2 16 53468112 0.162232897 0.191627668 0.071218197 0.079761793 0.134907151 0.054141599 0.08985793 0.037865566 0.068154246 0.101053013
CG0000108 C3orf35 3 37459206不适用
CG0000109 FNDC3B 3 171916037不适用
注意,我已经洗牌了第一行中的列标题以删除冗余信息。
TCGA…
标题列是示例标识符。请注意,硬编码列号是行不通的,因为我需要遍历多个文件,所有这些文件的样本/列数都是可变的

使用bash或python最有效的方法是什么

编辑:

使用下面John Zwinck的答案,但在每个
%s
之间有
\t
,我现在得到以下错误:

+ NR == 1 '{' ../../../methods/meth_ma_gene/awk_methreformat.sh: line 3: NR: command not found ../../../methods/meth_ma_gene/awk_methreformat.sh: line 5: syntax error near unexpected token `(' ../../../methods/meth_ma_gene/awk_methreformat.sh: line 5: ` for (i=1; i <= NF; i++) {'
其中引用的awk脚本为:

#!/usr/bin/awk -f                                                                                                                                                               
NR == 1 {
    # collect sample names                                                                                                                                                               
    for (i=1; i <= NF; i++) {
        sample[i] = $i
    }
}

NR == 2 {
    # first four columns are always the same                                                                                                                                             
    cols[1] = 1
    cols[2] = 3
    cols[3] = 4
    cols[4] = 5
    printf "%s\t%s\t%s\t%s\t", sample[1], $3, $4, $5

    # dynamic columns (in practice: 2,6,10,...)                                                                                                                                          
    for (i=1; i <= NF; i++) {
        if ($i == "Beta_value") {
            cols[length(cols)+1] = i
            printf "%s\t", sample[i]
        }
    }
    printf "\n"
}

NR >= 3 {
    # print cols from data row                                                                                                                                                           
    for (i=1; i <= length(cols); i++) {
        printf "%s\t", $cols[i]
    }
    printf "\n"
}
#/usr/bin/awk-f
NR==1{
#收集样本名称

对于(i=1;i您并不真的想将输入数据加载到内存中,因为它太大了。相反,流式处理方法会更快,对于这种
awk
非常适合:

#!/usr/bin/awk -f

BEGIN {
    FS = "\t";
    OFS = FS;
}

NR == 1 {
    # collect sample names                                                                                                                                                               
    for (i=1; i <= NF; i++) {
        sample[i] = $i
    }
}

NR == 2 {
    # first four columns are always the same                                                                                                                                             
    cols[1] = 1
    cols[2] = 3
    cols[3] = 4
    cols[4] = 5
    printf "%s %s %s %s ", sample[1], $3, $4, $5

    # dynamic columns (in practice: 2,6,10,...)                                                                                                                                          
    for (i=1; i <= NF; i++) {
        if ($i == "Beta_value") {
            cols[length(cols)+1] = i
            printf "%s ", sample[i]
        }
    }
    printf "\n"
}

NR >= 3 {
    # print cols from data row                                                                                                                                                           
    for (i=1; i <= length(cols); i++) {
        printf "%s ", $cols[i]
    }
    printf "\n"
}

既然您在问题中包含了python,那么您是否尝试过使用Pandas?不,应该吗?我刚才查阅了它,似乎Pandas提供了数据分析功能而不是数据格式。它通常对大型矩阵操作有用
cut -d '\t' -f 1,3,4,5,2,6