Linux
如何基於列加入文本文件並刪除linux中的第一行?
我有多個文本文件,如下所示:
文件 1.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
文件2.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
為了刪除文本文件中的第一行,我使用了這個
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的初始順序