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.
    

관련 정보