2

gsubの使用例は3つあります。

1.1。

echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$1); print $1 "\t" $2}' 
    A
B   B
    C

2.2。

$ echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$2); print $1 "\t" $2}'
A   
B   B
C   

3.3。

$ echo -e "A A\nB B\nC C" | awk '{gsub($(!/B/),"",$0); print $1 "\t" $2}'



.

なぜ3つの例では何も印刷されないのですか?awkは印刷されるべきではありませんか?:

B   B

3つの例を説明してください。

ご協力ありがとうございました。

4

1 に答える 1

3

私にとっての重要なポイントはこれです:$(!/B/)。非常に厄介です。それはどういう意味ですか(または少なくとも私はそれが意味すると思います)?

  • / B /B :行全体の文字を一致させようとします。一致する場合は戻り値1、そうでない場合は0
  • :前の結果コードを無効にします。
  • $() :前の命令を解決した後、行全体($0)または最初のフィールド( )を返します。$1

3番目のケースは問題ありません。

  • B命令が一致する場合gsub( $0, "", $0 )、空の行です。それは明らかです。
  • Bが一致しない場合、命令はgsub( $1, "", $0 )です。したがって、両方の文字が同じでありgsub、何度も行に置き換えられるため、すべての文字が削除されます。別のキャラクターを追加すると、違いがわかります。

例えば:

echo -e "A A 1\nB B 1\nC C 1" | awk '{gsub($(!/B/),"",$0); print $1 "\t" $2}'

その結果、次のようになります。

1

1
于 2012-10-10T16:35:59.320 に答える