3

我有一个像这样的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中执行此操作。我该怎么做呢?

更新

我如何也检查子字符串?

我想输出VENDORPRICE如果Pizza出现在ITEM?

输出应该是:

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

1 回答 1

11

这使得它:

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

解释

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

更新

我想输出VENDORPRICE如果Pizza出现在ITEM?

$ 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="|"}将(输入和输出)字段分隔符设置为|.
于 2013-09-27T09:47:14.693 回答