我正在将一些bash样式(实际上使用busybox)脚本转换为c,以便在自定义内核驱动程序中使用。一切都很顺利,但我对awk非常不熟悉,并且非常感谢这个班轮正在做什么的解释。功能在这里:
checksum=`echo $sum | busybox awk '{$NF *= -1; print}'`
checksum
和sum
是已经考虑的标准整数,可以是正数也可以是负数。我完全不知道当sum加入awk函数时会发生什么。
答案 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