デフォルトのファイルがあります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
ヘッダーの最後の2つのフィールドはハードコーディングできると仮定します。