データを含む行を削除する

私は、指定された値が含まれている場合、行を削除したいです。

2 5 8
1 3 7
8 5 9

だから私が7を含む行を3番目のフィールドとして削除したければ:

{
if($3 == 7){
####delete the line
}
}
8

3 答え

それは言うべきである

$ awk '$3 != 7'

これは数値比較であり、3番目のフィールドが "0.7e1"のような行は省略しますが、入力したサンプルデータに対しては機能します。

15
追加された

delete a line containing 7

awk '!/7/' yourFile
8
追加された
この構文はtcshでは機能しません。脱出する必要がある!
追加された 著者 ThomasMcLeod,
エスケープするは解決策ではありません。解決策は、 tcsh を使用しないことです!
追加された 著者 William Pursell,

他の答えが働く。理由は次のとおりです

Awkの標準処理モデルは、入力行を読み込み、オプションでその行に一致させ、一致した場合(オプション)入力を印刷することです。他の解決策では否定一致が使用されるため、一致しない限り行は出力されます。

コードサンプルで否定一致は使用されません。「何かが真であればそれを行う」と表示されます。入力を削除したいので、そのターゲットにマッチすると、そのターゲットをスキップするだけで済みます。

{
  if($3 == 7){
     #skip printing this line
     next
  }
}

IHTH。

6
追加された
問題は「もし私が7を3行目として含む行を削除したいのであれば:」私はその質問に答えてくれたと思う。あなたの心配に感謝している! :-)
追加された 著者 shellter,
これは print という else 文を追加しない限りうまくいかない。
追加された 著者 Masster,