awkを使用してファイルからテンプレートにデータを印刷する

awkを使用してファイルからテンプレートにデータを印刷する

いくつかの情報を含むファイル( A.txt ; sep="\t" 、最初の列は "\t")があります。

    Well    Fluor   Target  Content Sample  Cq  SQ
    A01 Cy5 EC  Unkn-01 205920777.1 25.714557922167 NaN
    A01 FAM Covid   Unkn-01 205920777.1 21.6541150578409    NaN
    A02 Cy5 EC  Unkn-09 neg5    25.5068289526473    NaN
    A02 FAM Covid   Unkn-09 neg5    NaN NaN 
    A07 Cy5 EC  Unkn-49     NaN NaN
    A07 FAM Covid   Unkn-49     NaN NaN

テンプレート (B.txt;sep=",") があります。

kit
Software Version =
Date And Time of Export =
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
,,,,,,,,,,
*reporting.

B.txtテンプレートを使用してA.txt情報をC.txtに入れたいと思います。 C.txt:

kit
Software Version =
Date And Time of Export =
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
,,205920777.1,A01,Unkn-01
,,neg5,A02,Unkn-09
,,,,,,,,,,
*reporting.

秘密は、A.txtで列5が空でない行だけを印刷することです。私は以下を試しました:

awk 'NR==FNR{a[$5]=$1;next}{print $1,$2,a[$1]} ' A.txt B.txt > C.txt

しかし、B.txtに同様のキーがないため、動作しません。そして、区切り記号の違いも問題です。誰かがアイデアを持つことができますか?

ありがとう

ベストアンサー1

あなたが言ったように、ファイルの最初の列が空であると仮定すると、すべての項目を左に移動する必要があります。 5番フィールドといえば実際には6番フィールドです。とにかく、私が考えることができる最も簡単な方法は、最初に使用できるA.txt形式にファイルを変更することです。

$ awk -F'\t' -v OFS="," '(NR>1 && $6!="NaN"){print ",",$6,$2,$5}' A.txt  | sort | uniq 
,,205920777.1,A01,Unkn-01
,,neg5,A02,Unkn-09

これにより、挿入する内容が提供されますC.txt。したがって、これを追加するには、次のようなエレガントでない操作を実行できます。

( head -n 13 B.txt 
  awk -F'\t' -v OFS="," '(NR>1 && $6!="NaN"){print ",",$6,$2,$5}' A.txt | sort | uniq
  tail -n+14 B.txt ) > C.txt

次を生成します。

$ cat C.txt
kit
Software Version =
Date And Time of Export =
Experiment Name =
Instrument Software Version =
Instrument Type = CFX
Instrument Serial Number =
Run Start Date =
Run End Date =
Run Operator =
Batch Status = VALID
Method = Novaprime
Date And Time of Export,Batch ID,Sample Name,Well,Sample Type,Status,Interpretive Result,Action*,Curve analysis
,,205920777.1,A01,Unkn-01
,,neg5,A02,Unkn-09
,,,,,,,,,,
*reporting.
    

おすすめ記事