2017-02-17 4 views
0

:私は出力がnawkを条件として2つをエバリュートする方法を教えてください。データセットの場合

12345 45678 

長い話を短くする必要がある

12345 78945 
12345 45678 

は、時々、二つの値が原因私の給与等級の上に制定特定の慣行に同じオブジェクトを表しています。ですから、同じオブジェクトを表す既知の値ペアのリストでは、これらを出力からフィルタリングするためにawkが必要です。上記の状況では、12345と78945は同じオブジェクトを表しているため、フィルタリングする必要があります。残りの行は私の注意を引くべきエラーです。

マイ未遂コード

cat data | nawk '(($1!="12345")&&($2!="78945"))' 

は出力として空のセットを生成します。だから私は自分の考え方や論理的な誤りを犯しています。つまり、nawkはそれぞれの条件を個々に評価しているのと同じようにcat data | nawk '($1!="12345")&&($2!="78945")'のように評価しています。

nawkがこのようなことをどのように解決するかは、私には分かりません。ご協力いただきましてありがとうございます。そして、理由から、これはnawkで行われなければならない。

+1

「nawk」は、異なるプラットフォームで異なる意味を持つ抽象概念です。 Awkの具体的な実装について言えば、より良いことです。 – mklement0

+0

wrt 'そして理由のために、これはnawkで行われなければならない.' - 何故?あなたがSolaris上にいるので、nawkを/ bin/awk(別名古いawk)というよりは機能的なものとして使用しないでください。nawk自体は時代遅れでPOSIX以前のものです。代わりに、/ usr/xpg4/bin/awkを使用してください。 –

+0

ヒントをありがとう。私はそれを将来も心に留めておきます。 –

答えて

4

$1!="12345"が真であるサンプルデータには行がありません。したがって、&&他のものが真となる条件はありません。それについて考える。これはawkとは関係がありません。単純なブール論理です。

は、あなたが明確であると感じ方、代わりにこれらのいずれかをお試しください:

nawk '($1!="12345") || ($2!="78945")' data 
nawk '!(($1=="12345") && ($2=="78945"))' data 
nawk '($1=="12345") && ($2=="78945"){next} 1' data 
nawk '($1" "$2) != "12345 78945"' data 
nawk '!/^[ \t]*12345[ \t]+78945([ \t+]|$)/' data 

また、私はcat data |を処分した理由を理解することはUUOCグーグル。

+1

それで論理的な誤り、それから、haha。私はしばらくそれを見て、どんな理由であれ明らかな結論に至ったことはありませんでした。私は頭の中で 'nawk '($ 1 ==" 12345 ")&&($ 2 ==" 78945 "))' data'のようなものを考えていたと思います。明白な選択は、もちろんでした。そこでは、行の出力を知るために条件の1つだけが偽である必要がありました。ありがとう。 –

関連する問題