关于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
................
Run Code Online (Sandbox Code Playgroud)
bash脚本中的awk句子是
date=01-08-2012
area=8
awk 'BEGIN {FS=";"} $1 ~ /'$date'/ && $2 ~ /'$area'/ { print $1 " " $2 " " $3 " " $4 " " $5 }' niveles-rams.cs
Run Code Online (Sandbox Code Playgroud)
但这只是给出了区域编号有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
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的关注,对于有经验的用户来说,这肯定是一个简单的问题.
Gur*_*uru 14
未经测试:
awk 'BEGIN {FS=";"} $1 ~ /'$date'/ && $2 == '$area'{......}'
Run Code Online (Sandbox Code Playgroud)
$ 2~/8/ - >这意味着如果第二个字段包含8个
$ 2 == 8 - >这意味着如果第二个字段等于8
Bar*_*mar 11
使用awk -v选项创建包含shell变量的awk变量.
awk -v date="$date" -v area="$area" '$1 == date && $2 == area { ... }'
Run Code Online (Sandbox Code Playgroud)
由于这个问题由于它的标题而引起了很多关注,所以让我发布一个更通用的答案,涵盖如何使用AND运算符awk.
假设你有一个文件myfile:
a 1 2 3
b 4 5 6
c 7 8 9
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找使用AND运算符进行多项检查的方法,则需要使用&&如下:
awk '$2 < 10 && $3 > 2' myfile
Run Code Online (Sandbox Code Playgroud)
哪个会回归:
b 4 5 6
c 7 8 9
Run Code Online (Sandbox Code Playgroud)
通常,您可以根据需要使用任意数量的条件
AND --> &&
OR --> ||
Run Code Online (Sandbox Code Playgroud)
因此,您可以组合多个逻辑表达式,例如:
awk '($2 < 10 || $3 > 2) && ($2 > 10 || $3 < 2)' myfile
# ^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)