いくつかの情報を含むファイル( 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.