首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk错误:每个规则必须有一个模式或一个动作部分

awk错误:每个规则必须有一个模式或一个动作部分
EN

Stack Overflow用户
提问于 2015-06-17 23:35:39
回答 1查看 624关注 0票数 0

here中,我得到了以下命令:

代码语言:javascript
复制
awk '/em1/ {i++; rx[i]=$2; tx[i]=$10}; END{print rx[2]-rx[1] " " tx[2]-tx[1]}' \
<(cat /proc/net/dev; sleep 1; cat /proc/net/dev)

完全按照预期工作。但是,我会以Mbps格式输出,因此我创建了两个命令,一个用于上传,一个用于下载(两者都工作):

代码语言:javascript
复制
awk '/^e/ {i++; rx[i]=$2}; END{printf("%.2f Mbps", \
((rx[2]-rx[1])/1024/1024))}'  <(cat /proc/net/dev; sleep 1; \
cat /proc/net/dev)  # download

awk '/^e/ {i++; tx[i]=$10}; END{printf("%.2f Mbps", \
((tx[2]-tx[1])/1024/1024))}'  <(cat /proc/net/dev; sleep 1; \
cat /proc/net/dev)  # upload

但是当我试图合并的时候,却出现了一些错误:

代码语言:javascript
复制
$ awk '/^e/ {i++; rx[i]=$2}; tx[i]=$10}; \
END{printf(" down: %.2f Mbps, up: %.2f Mbps", \
((rx[2]-rx[1])/1024/1024)), ((tx[2]-tx[1])/1024/1024))}' \
<(cat /proc/net/dev; sleep 1; cat /proc/net/dev)

awk: cmd. line:1: /^e/ {i++; rx[i]=$2}; tx[i]=$10}; END{printf(" down: %.2f Mbps, up: %.2f Mbps", ((rx[2]-rx[1])/1024/1024)), ((tx[2]-tx[1])/1024/1024))}
awk: cmd. line:1:                                ^ syntax error
awk: cmd. line:1: each rule must have a pattern or an action part
awk: cmd. line:1: /^e/ {i++; rx[i]=$2}; tx[i]=$10}; END{printf(" down: %.2f Mbps, up: %.2f Mbps", ((rx[2]-rx[1])/1024/1024)), ((tx[2]-tx[1])/1024/1024))}
awk: cmd. line:1:                                                                                                           ^ syntax error
awk: cmd. line:1: /^e/ {i++; rx[i]=$2}; tx[i]=$10}; END{printf(" down: %.2f Mbps, up: %.2f Mbps", ((rx[2]-rx[1])/1024/1024)), ((tx[2]-tx[1])/1024/1024))}
awk: cmd. line:1:                                                                                                                                      ^ syntax error

我试图用sprintf来解决这个问题,但结果是一样的。

操作系统:Linux4.0.5-1-ARCH x86_64 GNU/Linux

awk:GNU 4.1.3,API: 1.1 (GNUMPFR3.1.2-p11,GNU 6.0.0)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-18 00:06:31

这些错误,正如awk所帮助的(尽管是冗长的)告诉您。

代码语言:javascript
复制
awk: cmd. line:1: /^e/ {i++; rx[i]=$2}; tx[i]=$10}; END{printf(" down: %.2f Mbps, up: %.2f Mbps", ((rx[2]-rx[1])/1024/1024)), ((tx[2]-tx[1])/1024/1024))}
awk: cmd. line:1:                                ^ syntax error
awk: cmd. line:1: each rule must have a pattern or an action part
awk: cmd. line:1: /^e/ {i++; rx[i]=$2}; tx[i]=$10}; END{printf(" down: %.2f Mbps, up: %.2f Mbps", ((rx[2]-rx[1])/1024/1024)), ((tx[2]-tx[1])/1024/1024))}
awk: cmd. line:1:                                                                                                           ^ syntax error
awk: cmd. line:1: /^e/ {i++; rx[i]=$2}; tx[i]=$10}; END{printf(" down: %.2f Mbps, up: %.2f Mbps", ((rx[2]-rx[1])/1024/1024)), ((tx[2]-tx[1])/1024/1024))}
awk: cmd. line:1:                                                                                                                                      ^ syntax error

关闭}是因为您在此之前已经关闭了rx[i]=$2};的操作块,而,和最终的)是因为printf调用已经关闭了。完整的函数调用如下:

代码语言:javascript
复制
printf(" down: %.2f Mbps, up: %.2f Mbps", ((rx[2]-rx[1])/1024/1024))

所以,及其后面的所有内容都是语法错误,因为它本身不是一个有效的语句。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30904208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档