複数ファイルのawkからテンプレートのデータを印刷する方法

複数ファイルのawkからテンプレートのデータを印刷する方法

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

関連情報