grepで論理演算を解釈してみた

非常に分かりやすく説明してくれていたサイトがあったため画像も含めて引用。
※引用サイト管理者様へ※
画像などの削除が必要な場合すぐに削除します。
お手数をお掛けしますがコメント欄までご連絡いただけますでしょうか。

上記サイトを元に学習したがいまいち理解できなかったのでgrepを利用して確認してみた。

条件:

①1から100まで含まれる100行のファイルhoge.txtを作成
②数値Aが含まれる場合の条件をAとする(例:1)
③数値Bが含まれる場合の条件をBとする(例:2)
④AとBの条件を含む値が存在する(例:12)

grepコマンドで調査する場合する以下の通りとなる。

事前準備(seqでhoge.txtを作成):

hoge.txt作成:seq 1 100 > hoge.txt

以下引用:

1.論理積(AND)

論理積(AND)は、入力値がすべて1のときに1を出力する。それ以外の入力値のときは0を出力する。

            

以上引用:

論理積(AND)    :
grep A hoge.txt | grep B(AとBが含まれる文字列)

以下引用:

2.論理和(OR)


論理和(OR)は、入力値にいずれか1が入力されたときに1を出力する。それ以外の入力値のときは0を出力する。

             

以上引用:

論理和(OR)      :
grep -E ‘A|B’ hoge.txt(AもしくはBが含まれる文字列)


以下引用:

3.否定(NOT)

否定(NOT)は入力された値が1なら0に、0なら1に反転する。

             

以上引用:

否定(NOT)         :
grep -v A hoge.txt(Aが含まれない文字列)


以下引用:

4.否定論理積(NAND)


   否定論理積(NAND)は、AND出力を否定(NOT)したものである。すべての入力値が1のとき0を出力する。それ以外のときは、1を出力する。

              

以上引用:

否定論理積(NAND)  :
grep -v -e ‘A.*B’ -e ‘B.*A’ hoge.txt(A,Bが
含まれない文字列)


以下引用:

5.否定論理和(NOR)

    否定論理和(NOR)は、OR出力を否定(NOT)したものである。すべての入力値が0のとき1を出力する。それ以外のときは、0を出力する。

             


以上引用:

否定論理和(NOR)    :
grep -v -E ‘A|B’ hoge.txt(AもしくはBが
含まれない文字列)


以下引用:

6.排他的論理和(EOR、XOR)

 排他的論理和は、入力値が違うとき1を出力する。それ以外(入力値が同じとき)は、0を出力する。

               


以上引用:

排他的論理和(EOR、XOR) :

grep -E ‘A|B’ hoge.txt | grep -v -e ‘A.*B’ -e ‘B.*A’(OR条件の結果からAND条件の結果を除いた文字列)


備考:
XOR+AND=ORとなるため、
NOR+OR=NOR+AND+XOR=NAND+ANDとなる



※備忘録※
自分が作成した残念なXOR抽出方法を自分のために記載しておく:

grep 1 hoge.txt | grep 2 > a.txt ; grep -E ‘1|2’ hoge.txt > o.txt ; for i in `cat a.txt` ;do grep -v ${i} o.txt ;done | sort -n  | uniq -c | awk ‘{if( $1 == 2 ){ print $2 }}’
わざわざ無駄なファイルを生成しておる。。。

( ;∀;) イイハナシダナー

にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

コメント

タイトルとURLをコピーしました