簡體   English   中英

awk - 如何剪切一行,檢查列是否匹配,打印另一列?

[英]Awk - How to cut a line, check if a column matches something, print another column?

我有一個像這樣的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發生Pizza,我想輸出VENDORPRICE嗎?

輸出應該是:

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

這使它:

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

說明

  • -F\\| 設置| 作為字段分隔符。
  • $3=="Pizza"檢查第3個字段是否為“Pizza”。
  • {print $1,$4}打印第1和第4個字段。

更新

如果在ITEM發生Pizza,我想輸出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="|"}將(輸入和輸出)字段分隔符設置為|

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM