awk函数的说明

时间:2017-07-09 20:52:22

标签: bash awk

我正在将一些bash样式(实际上使用busybox)脚本转换为c,以便在自定义内核驱动程序中使用。一切都很顺利,但我对awk非常不熟悉,并且非常感谢这个班轮正在做什么的解释。功能在这里:

checksum=`echo $sum | busybox awk '{$NF *= -1; print}'`

checksumsum是已经考虑的标准整数,可以是正数也可以是负数。我完全不知道当sum加入awk函数时会发生什么。

1 个答案:

答案 0 :(得分:3)

这段代码awk '{$NF *= -1; print}'将所有行中最后一个字段$NF的值乘以-1,然后打印整行,并将新值分配给最后一个字段{ {1}}。

此语法通常称为速记分配,等同于$NF。我们有更多的简写操作,如加法和减法:

$NF=$NF*-1

在你的情况下:

$ echo "1 2 3" |awk '{$NF *=10;print}' #Equivalent to $NF=$NF*10
1 2 30
$ echo "1 2 3" |awk '{$NF +=10;print}' #Equivalent to $NF=$NF+10
1 2 13
$ echo "1 2 3" |awk '{$NF -=10;print}' #Equivalent to $NF=$NF-10
1 2 -7
$ echo "1 2 3" |awk '{$NF /=10;print}' #Equivalent to $NF=$NF/10
1 2 0.3

请注意,在awk中,每个输入行 - 每个记录默认由一个或多个空格分隔 然后将每一行拆分为从$ echo "1 2 3" |awk '{$NF *=-1;print}' 1 2 -3 (第一个字段)到最后一个字段$1的字段。

$NF

awk中的整个记录​​称为$ 0:

$ echo "1 2 3" |awk '{print $1}'
1
$ echo "1 2 3" |awk '{print $2}'
2
$ echo "1 2 3" |awk '{print $3}'
3
$ echo "1 2 3" |awk '{print $NF}'
3

默认打印整行$ echo "1 2 3" |awk '{print $0}' 1 2 3

$0