2

NOTを使用するとブール論理がどのように機能するかを理解しようとしています。awkを使用した例を挙げます

を含むテキストファイルがあります

CORE
PORT
CORE 
PORT
COREPORT
CORE
COREPORT

そして、すべてのCOREPORT行を削除したいと思います。私がそれをやろうと思った方法は、(コアではない)と(ポートではない)でした。

awk '/!CORE/&&/!PORT/{print}'

しかし、私がそれを試してみると、Imは実際にはANDの代わりにORを使用することになっています

awk '/!CORE/||/!PORT/{print}'

誰かが私の考えが間違っているところを説明できれば本当に嬉しいですし、ベン図やkathyschrockのブールマシンのようなもので視覚化できればとても嬉しいです

4

4 に答える 4

1

このようにしてみませんか

awk '/COREPORT/{next}1' file
于 2010-04-30T07:49:16.497 に答える
1

数学のために他のポスターがそれを非常にうまくやったので、私は腸の感覚またはあなたのブール式を与えることを試みます。

ブール式は、保持する行に対して真である必要があります

  • !PORTは、回線にPORTが含まれていないことを意味します
  • !COREは、行にCOREが含まれていないことを意味します

したがって、ブール式は、同時にPORTを含まず、COREを含まない行を保持することを意味します。明らかに、あなたのファイルにはそのような行はありません...

or本当に表現したいのは、PORTとCOREの両方を含まない行を保持することであるため、使用する必要がありますが、ご覧のとおり、上記のステートメントには否定が1つだけあります。あなたは次のようなことを言おうとしています:行にPORTが含まれていますか、COREも含まれていますか?そしてそれは!(/CORE/ && /PORT/)、ブール数学を使用して、自分で見たようにそれを書くこともでき/!CORE/||/!PORT/ます。

一般的に言って、否定的な主張は理解するのが難しいです。それを言うのは私だけではありません。たとえば、 PerlBestPracticeのDamianConwayはそれを指摘し、可能な限り肯定的なステートメントを使用することを推奨しました(そして、条件を否定したいときunlessの代わりにPerl演算子を使用してください)。if

于 2010-04-29T09:56:17.233 に答える
0

真理値表が近づいています...

CORE   PORT   !CORE   !PORT   AND(!CORE,!PORT)  OR(!CORE,!PORT)
 T       T      F       F            F                F
 T       F      F       T            F                T
 F       T      T       F            F                T
 F       F      T       T            T                T
于 2010-04-29T09:38:24.220 に答える
0

ロジックを視覚化するための良い方法は、カルノー図です。

または、数式を処理する場合は、次のことを覚えておいてください。

  • not(aおよびb)は(not a)または(not b)と同じです
  • not(aまたはb)は(not a)および(not b)と同じです

実際、必要なのは:(コアではない)および(ポートではない)ではなく、(コアおよびポートではない)ではなく、(コアではない)または(ポートではない)と同じです。

于 2010-04-29T09:38:37.633 に答える