Awk – 如何剪切一行,检查一列是否匹配,打印另一列?

我有一个这样的laaaaaarge文件:

VENDOR|QTY|ITEM|PRICE 2|3|Sugar|15 3|3|Coffee|35 4|244|Sugar2|55 33|2|Pizza|36 3|3|Pizza|55 5|5|Pizza2|33 6|6|Pizza3|44 

如何打印供应VENDORPRICE IFF ITEMPizza

我试过grep但是速度很慢。

我可以这样编写一个python代码,

 for line in file: fields = line.split('|') if fields[2] == 'Pizza': print fields[0], fields[-1] 

但是我想在shell中自己做awk 。 我该怎么做呢?

更新

如何检查子串?

如果比萨出现在ITEM我想输出VENDORPRICE

输出应该是:

 33|36 3|55 5|33 6|44 

这使得它:

 $ awk -F\| '$3=="Pizza" {print $1,$4}' file 33 36 3 55 

说明

  • -F\| 设置| 作为字段分隔符。
  • $3=="Pizza"检查第三个字段是否是“披萨”。
  • {print $1,$4}打印第一和第四个字段。

更新

如果比萨出现在ITEM我想输出VENDORPRICE

 $ awk 'BEGIN{OFS=FS="|"} $3~/Pizza/ {print $1,$4}' file 33|36 3|55 5|33 6|44 

说明

  • $3~/Pizza/检查“发生”,以及$3=="Pizza检查完全匹配。
  • BEGIN{OFS=FS="|"}将(输入和输出)字段分隔符设置为|