.
逻辑运算上面亦即所谓的大于、小于、等于等判断式上面,习惯上是以『
==
』来表示;
.
如果是直½给予一个值,例如变量设定时,就直½使用
=
而已。
好了,我们实际来运用一下逻辑判断吧!举例来说,在
/etc/passwd
当中是以冒号
":"
来作为字段的
分隔,
该文件中第一字段为账号,第三字段则是
UID
。那假设我要查阅,第三栏小于
10
以下的数
据,并且½列出账号与第三栏,
那么可以这样做:
[dmtsai@study ~]$
cat /etc/passwd | awk '{FS=":"} $3 < 10 {print $1 "
\
t " $3}'
root:x:0:0:root:/root:/bin/bash
bin 1
daemon
2
....(
以下省略
)....
有趣吧!不过,怎么第一行没有正确的显示出来呢?这是因为我们读入第一行的时候,那些变数
$1,
$2...
默认还是以空格键为分隔的,所以虽然我们定义了
FS=":"
了,
但是却½能在第二行后才开始
生效。那么怎么办呢?我们可以预先设定
awk
的变量啊!
利用
BEGIN
这个关键词喔!这样做:
[dmtsai@study ~]$
cat /etc/passwd | awk 'BEGIN {FS=":"} $3 < 10 {print $1 "
\
t " $3}'
root 0
bin 1
daemon 2
......(
以下省略
)......
很有趣吧!而除了
BEGIN
之外,我们还有
END
呢!另外,如果要用
awk
来½行『计算功能』呢?
以底下的例子来看,
假设我有一个薪资数据表档名为
pay.txt
,内容是这样的:
Name 1st 2nd 3th
VBird 23000 24000 25000
DMTsai 21000 20000 23000
Bird2 43000 42000
41000
如何帮我计算每个人的总额呢?而且我还想要格式化输出喔!我们可以这样考虑:
.
第一行只是说明,所以第一行不要½行加总
(NR==1
时处理
)
;
.
第二行以后就会有加总的情况出现
(NR>=2
以后处理
)
[dmtsai@study ~]$
cat pay.txt |
\
>
awk 'NR==1{printf "%10s %10s %10s %10s %10s
\
n",$1,$2,$3,$4,"Total" }
>
NR>=2{total = $2 + $3 + $4
>
printf
"%10s %10d %10d %10d %10.2f
\
n", $1, $2, $3, $4, total}'
Name 1st 2nd 3th Total
VBird 23000 24000 25000 72000.00
DMTsai 21000 20000 23000 64000.00
Bird2 43000 42000 41000 126000.00