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

时间:2015-10-20 05:52:53

标签: awk

首先感谢我在这里学到的一切。

这是我的输入csv:

TYPEµREFµCOLORµ
PRODUCTµ354µblueµ
MODELµ354µµ
MODELµ354µµ
PRODUCTµ253µgreenµ
MODELµ253µµ
MODELµ253µµ

分隔符为{FS =“μ”; OFS =“μ”}

我有什么:

  • 每个PRODUCT行都包含COLOR列中的值。
  • 每个MODEL行包含一个空的COLOR列。

我想要的是什么:

  • 我想用每个MODEL系列的颜色字符串中的每个PRODUCT行复制Color string,其中REF与PRODUCT相同。
  • (REF是连接PRODUCT和MODEL的同步键。)

我想要的结果:

TYPEµREFµCOLORµ
PRODUCTµ354µblueµ
MODELµ354µblueµ
MODELµ354µblueµ
PRODUCTµ253µgreenµ
MODELµ253µgreenµ
MODELµ253µgreenµ

我希望我很清楚......

我试着用if和-v很长时间......

先谢谢。

PEPE。

2 个答案:

答案 0 :(得分:0)

您可以使用此awk

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

<强>解释

  • $1 ~ /^PRODUCT/ - 匹配PRODUCT
  • 的列
  • color=$3 - 存储$3值。
  • $1 ~ /^MODEL/ - 匹配“模型”列。
  • $3=color - 为$3分配值。

答案 1 :(得分:0)

使用所有产品的记忆

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