小编Che*_*ppy的帖子

在 shell 脚本中处理 64 位整数

我正在尝试计算以太网接口上使用的带宽(1000 Mbit/s)。为了测试我的脚本,我使用iperf工具来生成巨大的带宽。

我现在面临的问题是,当eth0_rx1eth0_rx2变得其比最大32位的值大的值。我得到的差异为 0。

不知何故

printf 'eth0 Download rate: %s B/s\n' "$((eth0_rx2-eth0_rx1))"
Run Code Online (Sandbox Code Playgroud)

给出了正确的值,但是当尝试使用

eth0_diff=expr $eth0_rx2 - $eth0_rx1
Run Code Online (Sandbox Code Playgroud)

我得到的值为 0。

有没有办法处理超过 32 位rx_bytestx_bytes超过 32 位的情况?

我不确定这是计算已用带宽的优雅方法。如果没有,请建议其他替代方法。

示例输出:

eth0_rx1 = 2134947002 \
eth0_rx2= 2159752166 \
eth0 Download rate: 24805164 B/s \
eth0_diff = 12536645 \
eth0_rx_kB = 12242 \
eth0_rx_kB_100 = 1224200 \
eth0_rx_kB_BW = 9

eth0_rx1 = 2159752166 \
eth0_rx2= 2184557522 \
eth0 Download rate: 24805356 B/s \
eth0_diff = 0 …
Run Code Online (Sandbox Code Playgroud)

shell-script arithmetic

7
推荐指数
2
解决办法
994
查看次数

使用 awk 在匹配模式后提取内容时出错

我想用来awk将输入文件的内容排序到不同的输出文件中。

简单的例子

假设以下输入文件:

awk程序

awk '/START/{x="F"++i;}{print > x}' sample.txt
Run Code Online (Sandbox Code Playgroud)

将以下输出生成到文件中:

实际使用场景

当我将此技术应用于我的实际用例时,

awk '/Certificate Revocation List (CRL):/{x="F"++i;}{print > x}' test_cert.pem
Run Code Online (Sandbox Code Playgroud)

不提取内容从 Certificate Revocation List (CRL):

相反,它给出了以下错误:

START  
Solaris  
Aix  
SCO  
Run Code Online (Sandbox Code Playgroud)

我尝试将模式放在引号中,但它不起作用,不确定模式是否是多字的,我们如何提取内容。

test_cert.pem如下外观:

awk '/Certificate Revocation List (CRL):/{x="F"++i;}{print > x}' test_cert.pem
Run Code Online (Sandbox Code Playgroud)

awk text-processing

4
推荐指数
1
解决办法
75
查看次数

标签 统计

arithmetic ×1

awk ×1

shell-script ×1

text-processing ×1