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]

しかし、シェル自体からAwkでやりたいです。どうすればいいですか?

アップデート

部分文字列もチェックするにはどうすればよいですか?

VENDOR出力したいのですが、ピザが発生した場合PRICEは?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"3 番目のフィールドが「ピザ」かどうかを確認します。
  • {print $1,$4}1 番目と 4 番目のフィールドを出力します。

アップデート

VENDOR出力したいのですが、ピザが発生した場合PRICEは?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 に答える