0

テキストを標準出力に送信するプログラムがあります。しかし、5 番目の列が「*」ではない行のみを保持したいと考えています。これはアスタリスク文字であり、すべてをキャッチする正規表現ではありません。これにはエスケープを使用できないようです。試してみました

./a.out |awk '$5!=* {print}'
awk: $5!=* {print}
awk:     ^ syntax error
./a.out |awk '$5!=\* {print}'
awk: $5!=\* {print}
awk:     ^ backslash not last character on line

もちろん awk は必須ではありませんが、これが最も簡単だと思いました。

ありがとう

4

4 に答える 4

4

awkほとんどの Algol/C ファミリー言語に似ています。リテラル文字列には文字列引用符が必要です。

awk '$5 != "*" {print}'
于 2012-04-11T01:34:58.240 に答える
2

これを試して:

awk '$5!="*"{print}'
于 2012-04-11T01:39:38.813 に答える
1

Perlの場合:

perl -ane 'print unless $F[4] eq q(*)' file

スイッチは-nこのループをスクリプトにラップして、コマンドラインでファイル名引数を読み取ります。

LINE:
while (<>) {
    ... # your script here
}

-a行(空白上)を@F. Unlikeawk` $F[0]と呼ばれる事前に宣言された配列に自動分割するアームは最初のフィールドのみです。

引数は単にあなたの-eスクリプトです。

于 2012-04-11T01:41:02.657 に答える
-1

これはあなたのために働くかもしれません:

awk '$5 !~ /^[*]$/' file
于 2012-04-11T04:55:46.920 に答える