使用awk将值从一行复制到具有条件的另一行

使用awk将值从一行复制到具有条件的另一行,awk,Awk,首先感谢大家,感谢我在这里学到的一切 这是我的输入csv: TYPEµREFµCOLORµ PRODUCTµ354µblueµ MODELµ354µµ MODELµ354µµ PRODUCTµ253µgreenµ MODELµ253µµ MODELµ253µµ 分隔符为{FS=“µ”;OFS=“µ”} 我所拥有的: 每个产品线在“颜色”列中都包含一个值 每个模型线都包含一个空颜色列 我想要什么: 我想复制颜色字符串从每个产品线的颜色字符串的每个模型线与相同的产品参考 (REF是链接产品和

首先感谢大家,感谢我在这里学到的一切

这是我的输入csv:

TYPEµREFµCOLORµ
PRODUCTµ354µblueµ
MODELµ354µµ
MODELµ354µµ
PRODUCTµ253µgreenµ
MODELµ253µµ
MODELµ253µµ
分隔符为{FS=“µ”;OFS=“µ”}

我所拥有的:

  • 每个产品线在“颜色”列中都包含一个值
  • 每个模型线都包含一个空颜色列
我想要什么:

  • 我想复制颜色字符串从每个产品线的颜色字符串的每个模型线与相同的产品参考
  • (REF是链接产品和型号的同步键。)
我想要的结果是:

TYPEµREFµCOLORµ
PRODUCTµ354µblueµ
MODELµ354µblueµ
MODELµ354µblueµ
PRODUCTµ253µgreenµ
MODELµ253µgreenµ
MODELµ253µgreenµ
我希望我是清楚的

我很长一段时间都在尝试使用if和-v

提前谢谢


pépé。

您可以使用此
awk

awk -F'µ' '$1 ~ /^PRODUCT/{color=$3} $1 ~ /^MODEL/{$3=color}1' OFS='µ' file
说明:

  • $1~/^PRODUCT/
    -将列与
    产品
    匹配
  • color=$3
    -存储
    $3
  • $1~/^MODEL/
    -将列与“MODEL”匹配
  • $3=color
    -为
    $3
    赋值

使用所有产品的存储器

awk 'BEGIN { OFS = FS = "µ"}
   {
   if ($1 ~ /^PRODUCT/) Prod[ $2] = $3
    else if (Prod[ $2] !~ /^$/) $3 = Prod[ $2]
   print
   }' YourFile
假设模型仅与标题产品关联

awk 'BEGIN { OFS = FS = "µ"}
   {
   if ($1 ~ /^PRODUCT/){ Ref=$2; Color = $3 }
    else if ( Ref == $2 && Color !~ /^$/) $3 = Color
   print
   }' YourFile

完美的谢谢我将使用它来验证ref。使用ref键:
awk-F'µ'$1~/^PRODUCT/{color=$3;ref=$2}$1~/^MODEL/&$2~ref{$3=color}1'OFS='µ'file.csv
非常有效。再次感谢您到目前为止尝试的问题中缺少的awk代码。第一个答案是使用ref和array的完美答案。我从2天开始尝试的:/多谢。