我有两个文件,A.txt
和B.txt
:
A.txt(sep = \ t):
Well Sample Name Target Name Task Reporter
A1 B1000-1 MS2 UNKNOWN JUN
A1 B1000-1 Ngene UNKNOWN VIC
A1 B1000-1 ORF1ab UNKNOWN FAM
A1 B1000-1 Sgene UNKNOWN ABY
A2 B500-3 MS2 UNKNOWN JUN
A2 B500-3 Ngene UNKNOWN VIC
A2 B500-3 ORF1ab UNKNOWN FAM
和B.txt(sep =;)
kit;;;;;;;
Software Version = cti;;;;;;;
Date And Time of Export = 06/02/20 14:14:11;;;;;;;
Experiment Name = taq;;;;;;;
Instrument Software Version = ;;;;;;;
Instrument Type = sds7500fast;;;;;;;
Instrument Serial Number = ;;;;;;;
Run Start Date = Tue Jun 02 12:00:40 CEST 2020;;;;;;;
Run End Date = Tue Jun 02 13:14:42 CEST 2020;;;;;;;
Run Operator = FE;;;;;;;
Batch Status = VALID;;;;;;;
;;;;;;;
Date And Time of Export;Batch ID;Sample Name;Well;Sample Type;Status;Interpretive;Action*;Cт
06/02/2020 14:14;020620 TAQPATH BIS;B50-1-KF;H2;Patient;VALID;SARS-CoV-2 Not Detected;REPORT;29.2525;Undetermined;16.0231;33.9412
我想在输出文件中获取它C.txt
:
kit;;;;;;;
Software Version = cti;;;;;;;
Date And Time of Export = 06/02/20 14:14:11;;;;;;;
Experiment Name = taq;;;;;;;
Instrument Software Version = ;;;;;;;
Instrument Type = sds7500fast;;;;;;;
Instrument Serial Number = ;;;;;;;
Run Start Date = Tue Jun 02 12:00:40 CEST 2020;;;;;;;
Run End Date = Tue Jun 02 13:14:42 CEST 2020;;;;;;;
Run Operator = FE;;;;;;;
Batch Status = VALID;;;;;;;
;;;;;;;
Date And Time of Export;Batch ID;Sample Name;Well;Sample Type;Status;Interpretive;Action*;MS2;Ngene;ORF1ab;Sgene
06/02/2020 14:14;020620 TAQPATH BIS;B50-1-KF;H2;Patient;VALID;SARS-CoV-2 Not Detected;REPORT;29.2525;Undetermined;16.0231;33.9412
所以我想筛选以A1
in开头的行,A.txt
并将这些行的第3个字段复制为的第13行的第9个字段B.txt
。
我已经用不同的FNR == NR进行了一些测试,但没有确定的结果。
谢谢
这是一种方法:
$ awk -F'[;\t]' '{if(NR==FNR){if($1=="A1"){s==""?s=$3:s=s";"$3;}}else{if(FNR==13){$9=s;}OFS=";";print}}' A.txt B.txt
kit;;;;;;;
Software Version = cti;;;;;;;
Date And Time of Export = 06/02/20 14:14:11;;;;;;;
Experiment Name = taq;;;;;;;
Instrument Software Version = ;;;;;;;
Instrument Type = sds7500fast;;;;;;;
Instrument Serial Number = ;;;;;;;
Run Start Date = Tue Jun 02 12:00:40 CEST 2020;;;;;;;
Run End Date = Tue Jun 02 13:14:42 CEST 2020;;;;;;;
Run Operator = FE;;;;;;;
Batch Status = VALID;;;;;;;
;;;;;;;
Date And Time of Export;Batch ID;Sample Name;Well;Sample Type;Status;Interpretive;Action*;MS2;Ngene;ORF1ab;Sgene
06/02/2020 14:14;020620 TAQPATH BIS;B50-1-KF;H2;Patient;VALID;SARS-CoV-2 Not Detected;REPORT;29.2525;Undetermine
或者,更容易阅读:
awk -F'[;\t]' '{
if(NR==FNR){
if($1=="A1"){
if(s==""){ s=$3 }
else{ s=s";"$3 }
}
else{
if(FNR==13){ $9=s; }
OFS=";";
print
}
}' A.txt B.txt > C.txt
-F'[;\t]'
:这会将字段分隔符设置为;
或,\t
因此我们可以正确读取两个文件。请注意,这假设没有;
in fileA
,也没有\t
infileB
。if(NR==FNR){
:如果我们正在读取第一个文件。if($1=="A1"){
:如果第一个字段是A1
。s==""?s=$3:s=s";"$3;
:如果变量s
为空,则将其设置为的值$3
。如果不为空,请添加;
,然后添加$3
。这将建立我们想要插入的字符串B.txt
。else {
:如果我们正在读取第二个文件(这将完成if(NR==FNR)
)。if(FNR==13){ $9=s; }
:如果这是当前文件的第13行,则将第9字段设置为的值s
。OFS=";"; print
:我们要打印第二个文件中的所有行,但是我们需要将输出字段分隔符;
正确打印。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句