17

AND論理演算子についての基本的な質問です。列 1 と列 2 の値に基づいて、データ ファイル niveles.csv のいくつかのフィールドを抽出しようとしています。「field1=date and field2=area then print fields 3 to 5」という awk 文を書きたいと思います。 .

私のデータファイルは次のようになります

01-08-12;1;0;0;0
01-08-12;2;1;1;1
01-08-12;3;0;0;1
................

bashスクリプト内のawk文は

date=01-08-2012
area=8
awk 'BEGIN {FS=";"}  $1 ~ /'$date'/ && $2 ~ /'$area'/ { print $1 " " $2 " "  $3 " " $4 " " $5 }' niveles-rams.cs

しかし、これは、エリア番号に8が含まれる3つのケース(8、18、および28)のフィールドを提供するだけですが、エリア8のデータのみが必要です

01-08-2012 8 0 0 0
01-08-2012 18 2 2 1
01-08-2012 28 2 1 0

ご注意いただきありがとうございます。経験豊富なユーザーにとっては簡単な質問であることを確認してください。

4

4 に答える 4

15

未検証:

awk 'BEGIN {FS=";"}  $1 ~ /'$date'/ && $2 == '$area'{......}'

$2 ~ /8/ -> これは、2 番目のフィールドに 8 が含まれている場合を意味します

$2 == 8 -> これは、2 番目のフィールドが 8 に等しい場合を意味します

于 2012-10-25T11:34:13.813 に答える
11

この質問はそのタイトルのために多くの注目を集めているので、 でAND演算子を使用する方法をカバーするより一般的な回答を投稿させてくださいawk

ファイルがあるとしますmyfile:

a 1 2 3
b 4 5 6
c 7 8 9

演算子を使用して複数のチェックを行う方法を探している場合は、次のようANDに使用する必要があります&&

awk '$2 < 10 && $3 > 2' myfile

どちらが返されますか:

b 4 5 6
c 7 8 9

一般に、次のことを考慮して、必要な数の条件を使用できます。

AND --> &&
OR  --> ||

したがって、次のように複数の論理式を組み合わせることができます。

awk '($2 < 10 || $3 > 2) && ($2 > 10 || $3 < 2)' myfile
#    ^^^^^^^^^^^^^^^^^^^    ^^^^^^^^^^^^^^^^^^^
于 2015-10-13T13:47:30.727 に答える
11

awk の-vオプションを使用して、シェル変数を含む awk 変数を作成します。

awk -v date="$date" -v area="$area" '$1 == date && $2 == area { ... }'
于 2012-10-25T12:00:55.213 に答える
0

これで問題ないはずです。少しテストしてみました。

date="01-08-12"
area=8
awk -F\; '$1 == "'$date'" && $2 == '$area' { print $3 " " $4 " " $5 }' niveles-rams.csv

そこに日付とエリアのフィールドが必要な場合、awk ステートメントは次のようになります。

awk -F\; '$1 == "'$date'" && $2 == '$area' { print $1 " " $2 " " $3 " " $4 " " $5 }' niveles-rams.csv
于 2012-10-25T12:24:32.787 に答える