9

私のファイルは次のようになります。

L   0   256 *   *   *   *   *
H   0   307 100.0   +   0   0
S   30  351 *   *   *   *   *
D   8   27  *   *   *   *   99.3    
C   11  1   *   *   *   *   *   

私のスクリプトでは、 $1 を使用して特定の行の awk print $0 から始めたいと思います

そのような

awk '{if ($1!="C") {print $0}  else if ($1!="D") {print $0}}'

しかし、「C」と「D」を 1 つの IF ステートメントに結合する方法が必要です。

たとえば、== L、H、S を検索したい場合、つまり... NOT C または D を検索するにはどうすればよいでしょうか?

4

3 に答える 3

12

あなたの現在の状態は両方とも正しくなく、同時に間違っていることはありません$1!="C"$1!="D"したがって、常にファイル全体を印刷します。

これはあなたが説明したように行います:

awk '{if ($1!="C" && $1!="D") {print $0}}'  file
于 2012-10-29T20:12:59.297 に答える
7

awk を使用すると、次の構文で特定のパターンのルールを提供できます。

awk 'pattern {action}' file

パターンの定義については、awk のマニュアル ページを参照してください。あなたの場合、正規表現を構文のパターンとして使用できます

awk'/regular expression/ {action}' file

ニーズに合った基本的な正規表現は次のようになります

awk '/^[^CD]/ {print $0}' file

実際に短くすることができます

awk '/^[^CD]/' file

コメントで提案されているように、これ{print $0}がデフォルトのアクションです。

于 2012-10-29T20:14:13.447 に答える
3
awk '$1 ~ /[CD]/' file

awk '$1 ~ /[LHS]/' file

awk '$1 ~ /[^LHS]/' file

awk '$1 !~ /[LHS]/' file
于 2012-10-29T20:13:02.817 に答える