关于AND逻辑运算符的基本问题。我试图根据第1列和第2列的值在我的数据文件niveles.csv中提取一些字段。我想写一个awk句子说“当field1 = date和field2 = area然后打印字段3到5”
我的数据文件看起来像
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个内部(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
提前感谢您的关注,对于有经验的用户来说,这肯定是一个简单的问题。
答案 0 :(得分:13)
未经测试:
awk 'BEGIN {FS=";"} $1 ~ /'$date'/ && $2 == '$area'{......}'
$ 2~ / 8 / - >这意味着如果第二个字段包含8
$ 2 == 8 - >这意味着如果第二个字段等于8
答案 1 :(得分:11)
使用awk的-v
选项创建包含shell变量的awk变量。
awk -v date="$date" -v area="$area" '$1 == date && $2 == area { ... }'
答案 2 :(得分:9)
由于这个问题因其标题而受到很多关注,让我发一个更通用的答案,介绍如何在AND
中使用awk
运算符。 < / p>
假设您有一个文件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
# ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
答案 3 :(得分: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