기본 파일이 있습니다 A.txt
(필드 구분 기호 = \t).
Sample ID Internal Control Result Consensus Sequence Lane Index Set Index ID
2154686427 Pass Detected Not Available 1,2,3,4 1 UDP0001
2154666275 Pass Detected Not Available 1,2,3,4 1 UDP0002
2154686427.mapping_metrics.csv
각 샘플에는 여기 및 2154666275.mapping_metrics.csv
(필드 구분 기호 = ,)와 같은 동일한 측정항목이 포함된 파일이 있습니다 . 2154686427.mapping_metrics.csv
:
MAPPING/ALIGNING SUMMARY,,Total input reads,5654101,100.00
MAPPING/ALIGNING SUMMARY,,Number of duplicate marked reads,5577937,98.65
그리고 2154666275.mapping_metrics.csv
:
MAPPING/ALIGNING SUMMARY,,Total input reads,5651111,100.00
MAPPING/ALIGNING SUMMARY,,Number of duplicate marked reads,5511111,97.2
A.txt
다음과 같이 각 파일의 제목($3)과 해당 값($4)을 인쇄하고 싶습니다 .
Sample ID Internal Control Result Consensus Sequence Lane Index Set Index ID Total input reads Number of duplicate marked reads
2154686427 Pass Detected Not Available 1,2,3,4 1 UDP0001 5654101 5577937
2154666275 Pass Detected Not Available 1,2,3,4 1 UDP0002 561111 5511111
이 일을 할 생각이 있나요?
파일 이름 유사성을 기반으로 유사한 질문을 검색해 보았지만 아무것도 찾지 못했습니다. 감사해요
답변1
awk -v OFS="\t" -F, '
FS==","{
hdr[FNR]=$3 # save header in array
sub(/\..*/, "", FILENAME) # remove `.mapping_metrics.csv` from FILENAME
sub(/.*\//, "", FILENAME) # remove parent path from FILENAME
val[FILENAME]=val[FILENAME] OFS $4 # append value to array using tab as separator
next
}
FNR==1{
print $0 OFS hdr[1] OFS hdr[2] # print header and new header fields
next
}
{ print $0 val[$1] } # print record with new values
' *.mapping_metrics.csv FS="\t" A.txt
답변2
awk -F '\t' '
BEGIN { OFS = FS; ORS = "" }
NR==1 {
h1 = "Total input reads"
h2 = "Number of duplicate marked reads"
print $0, h1, h2 RS
next
}
{
print
FS = ","
f = $1 ".mapping_metrics.csv"
while (getline < f > 0)
if ((h1==$3)||(h2==$3))
print "", $4
print RS
close(f)
FS = OFS
}
' ./A.txt
헤더의 마지막 두 필드는 하드코딩될 수 있다고 가정합니다.