다음과 같은 텍스트 파일이 여러 개 있습니다.
파일 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에서 코드를 사용하여 원하는 출력을 얻는 방법.
답변1
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;이 배열의 인덱스는 다음과 같습니다.유전자IDorder
- 초기 순서를 유지하기 위해 레코드 번호로 색인된 보조 배열유전자ID
답변2
다음을 시도해 볼 수도 있습니다.
ls -1 *featureCount.txt | parallel 'cat {} | sed '1d' | cut -f7 {} > {/.}_clean.txt'
ls -1 *featureCount.txt | head -1 | xargs cut -f1 > genes.txt
paste genes.txt *featureCount_clean.txt > output.txt