如何合并来自awk中两个文件的数据

斯达西汀

我有两个文件,A.txtB.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

所以我想筛选以A1in开头的行,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,也没有\tinfileB
  • 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将两个文件中的数据与AWK中的标头合并

来自分类Dev

如何使用awk合并来自两个不同文件的一列

来自分类Dev

如何合并来自两个独立表的数据?

来自分类Dev

匹配数据以更正来自awk中两个文件的ID

来自分类Dev

组合来自awk中两个文件的输入

来自分类Dev

如何使用awk按列合并两个文件?

来自分类Dev

awk要求合并两个文件

来自分类Dev

Linux AWK合并两个文件

来自分类Dev

awk 合并两个文件

来自分类Dev

如何逐行合并两个文件的数据?

来自分类Dev

如何合并两个文件之间的通用数据集

来自分类Dev

合并和分组两个XML文件中的数据

来自分类Dev

合并顺序不同的两个文件中的数据。

来自分类Dev

如何在Perl中匹配来自两个大文件的数据?

来自分类Dev

使用awk从两个文件中获取数据

来自分类Dev

如何合并两个文本文件中的数据

来自分类Dev

如何基于多列中的数据合并两个文件?

来自分类Dev

如何在不覆盖python中任何数据的情况下合并两个文件?

来自分类Dev

如何合并两个文本文件中的数据

来自分类Dev

如何使用来自两个文件但在awk中的特定列中的公共键打印值

来自分类Dev

如何合并两个表中的数据

来自分类Dev

如何在Linux中合并两个文件

来自分类Dev

如何在JavaScript中合并两个.csv文件?

来自分类Dev

如何在R中合并两个文件?

来自分类Dev

如何在python中合并两个csv文件

来自分类Dev

如何合并对应行中的两个文件?

来自分类Dev

如何合并两个文件中的行?

来自分类Dev

需要根据记录 id 合并来自两个 xml 文件的数据

来自分类Dev

合并来自数据库中两个表的数据以获得总和(C#)

Related 相关文章

热门标签

归档