如何基于一列加入文本文件并删除linux中的第一行?

初学者

我有多个文本文件,如下所示:

file1.txt:

# Program:featureCounts v1.6.0; Command:"featureCounts" "-a" "/documents/gencode_Release27_GRCh38.p10_PRI/gencode.v27.primary_assembly.annotation_nochr.gtf" "-F" "GTF" "-p" "-s" "2" "-T" "8" "-o" "/read_counts/S100A.txt" "/documents/S100A.sorted.bam" 
Geneid  Chr     Start   End     Strand  Length  /path/to/documents/S100A.sorted.bam
ENSG00000223972.5       1;1;1;1;1;1;1;1;1       11869;12010;12179;12613;12613;12975;13221;13221;13453   12227;12057;12227;12721;12697;13052;13374;14409;13670   +;+;+;+;+;+;+;+;+       1735    0
ENSG00000227232.5       1;1;1;1;1;1;1;1;1;1;1   14404;15005;15796;16607;16858;17233;17606;17915;18268;24738;29534       14501;15038;15947;16765;17055;17368;17742;18061;18366;24891;29570       -;-;-;-;-;-;-;-;-;-;-   1351    0
ENSG00000278267.1       1       17369   17436   -       68      0
ENSG00000243485.5       1;1;1;1;1       29554;30267;30564;30976;30976   30039;30667;30667;31109;31097   +;+;+;+;+       1021    0
ENSG00000284332.1       1       30366   30503   +       138     0
ENSG00000237613.2       1;1;1;1;1       34554;35245;35277;35721;35721   35174;35481;35481;36073;36081   -;-;-;-;-       1219    0

file2.txt:

# Program:featureCounts v1.6.0; Command:"featureCounts" "-a" "/documents/gencode_Release27_GRCh38.p10_PRI/gencode.v27.primary_assembly.annotation_nochr.gtf" "-F" "GTF" "-p" "-s" "2" "-T" "8" "-o" "/read_counts/S106.txt" "/documents/S106.sorted.bam" 
Geneid  Chr     Start   End     Strand  Length  /path/to/documents/S106.sorted.bam
ENSG00000223972.5       1;1;1;1;1;1;1;1;1       11869;12010;12179;12613;12613;12975;13221;13221;13453   12227;12057;12227;12721;12697;13052;13374;14409;13670   +;+;+;+;+;+;+;+;+       1735    0
ENSG00000227232.5       1;1;1;1;1;1;1;1;1;1;1   14404;15005;15796;16607;16858;17233;17606;17915;18268;24738;29534       14501;15038;15947;16765;17055;17368;17742;18061;18366;24891;29570       -;-;-;-;-;-;-;-;-;-;-   1351    42
ENSG00000278267.1       1       17369   17436   -       68      12
ENSG00000243485.5       1;1;1;1;1       29554;30267;30564;30976;30976   30039;30667;30667;31109;31097   +;+;+;+;+       1021    0
ENSG00000284332.1       1       30366   30503   +       138     0
ENSG00000237613.2       1;1;1;1;1       34554;35245;35277;35721;35721   35174;35481;35481;36073;36081   -;-;-;-;-       1219    1

像上面一样,我有100多个文本文件。我想将它们合并为单个文本文件,如下所示。

输出应如下所示:

Geneid            S100A   S106
ENSG00000223972.5   0       0
ENSG00000227232.5   0      42
ENSG00000278267.1   0      12
ENSG00000243485.5   0       0
ENSG00000284332.1   0       0
ENSG00000237613.2   0       1

为了删除文本文件中的第一行,我使用了this tail -n +2 S100A.txt但是我必须分别对每个文件执行此操作。如何在Linux中使用代码获得所需的输出。

罗曼·佩列赫雷斯特

Awk 解决方案:

awk 'BEGIN{ head = "Geneid" }
     FNR == 2{ 
         gsub(/^.+documents\/|\.sorted\.bam$/, "", $NF);
         head = head "\t" $NF 
     }
     FNR > 2{ 
         genes[$1] = genes[$1] "\t" $NF;
         order[FNR-2] = $1
     }
     END{ 
         print head; 
         for (i = 1; i <= FNR-2; i++) print order[i] genes[order[i]]
     }' file*.txt
  • FNR -正在读取的记录号
  • $NF-最后一个字段值(NF本身指向字段总数)
  • genes-包含每个基因id的最后一个字段值的累积序列的数组数组由基因ID索引
  • order-用记录号索引的辅助数组,以保持基因ID的初始顺序

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

从文本文件中删除第一列

如何获取输入文本文件的第一行,同时从文本文件中删除该行

如何从文本文件中删除一行?

如何在Java中删除文本文件的第一行

批量删除删除文本文件和第一行数据中的引号

如何从python中的文本文件中删除第一列和第三列

使用sed从Windows中的文本文件中删除第一行

在POWERSHELL中运行脚本后,从文本文件中删除第一行

如何在读入R之前删除文本文件的空第一列

使用awk从文本文件中删除第一列

如何使用bash / sed脚本删除文本文件的第一行?

从文本文件中删除除第一行外的所有内容

从文本文件中删除或清除一行

散列文本文件中每一行的第一列,并将其写入文件的第三列

如何使用cmd在文本文件的第一行中编写?

如何为数据框中的每一列创建多个文本文件并保留第一列?

如何从 Python 中的文本文件中的每一行中删除模式

在文本文件中,如何删除下一行的所有行子集?

如何使用SED / AWK将文本文件中的第一行与最后一行交换

如何在C ++中从文本文件中删除一行?

如何从C中的文本文件中删除最后一行

如何从文本文件中删除最后一列

如何在c#中从一行删除到文本文件的末尾?

sparklyr:跳过文本文件的第一行

编辑大文本文件的第一行

复制文本文件的第一行?

只读文本文件的第一行

PHP编辑文本文件的第一行

从文本文件中删除第一行,并将其余单词放入与空格分开的数组中,