使用 ID 文件替换数据集中的某些列,然后打印整个数据集

Use ID file to replace some columns in dataset then print entire datset

还是编码新手,很难连接命令以获得所需的输出。

我有以下格式的数据文件:

NationalCowID,TestDate,Batch,LN,DIM,YBr,year,CH4,PLS,qtl
206004574,20141208,6,2,92,1,2014,424.4410055,NA,1
206004573,20141209,6,2,93,2,2014,436.4504712,NA,4
206004575,20141207,6,2,91,1,2014,380.94688,NA,6
206004576,20141208,6,2,92,2,2014,424.4410055,NA,7
206004579,20141209,6,2,93,2,2014,436.4504712,NA,8
206004571,20141207,6,2,91,1,2014,380.94688,NA,9

在数据中,我想找到变量 YBr == 1 的行,并将该行中除 NationalCowID 或 qtl 之外的所有列替换为 *。然后打印整个数据集。

这就是我想要实现的目标

NationalCowID,TestDate,Batch,LN,DIM,YBr,year,CH4,PLS,qtl
206004574,20141208,*,*,*,*,*,*,*,*,1
206004573,20141209,6,2,93,2,2014,436.4504712,NA,4
206004575,20141207,*,*,*,*,*,*,*,*,6
206004576,20141208,6,2,92,2,2014,424.4410055,NA,7
206004579,20141209,6,2,93,2,2014,436.4504712,NA,8
206004571,20141207,*,*,*,*,*,*,*,*,9

我想出了使用 sed 和 awk 的方法,但我正在努力超越基础并结合使用命令:

awk -F ',' '{ if ( == 1) sed '{s/[=12=]/*/g}' print [=12=]}'}' file1 > file2

任何方向将不胜感激!

由于您没有向我们展示示例预期输出,因此无法确定是否遵循。通过这个解决方案,我没有对字符串 YBrNationalCowID 的字段值进行硬编码,因此它也可以是动态的。能否请您尝试关注一次。

awk '
BEGIN{
  FS=OFS=","
}
FNR==1{
  for(i=1;i<=NF;i++){
    if($i=="YBr"){
       field=i
    }
    if($i=="NationalCowID"){
       value=i
    }
  }
}
$field==1{
  for(i=value+1;i<=NF;i++){
       $i="*"
  }
}
1
' Input_file

输出如下。

NationalCowID,TestDate,Batch,LN,DIM,YBr,year,CH4,PLS,qtl
206004574,*,*,*,*,*,*,*,*,*
206004573,20141209,6,2,93,2,2014,436.4504712,NA,4
206004575,*,*,*,*,*,*,*,*,*
206004576,20141208,6,2,92,2,2014,424.4410055,NA,7
206004579,20141209,6,2,93,2,2014,436.4504712,NA,8
206004571,*,*,*,*,*,*,*,*,*