嗨,我需要一个脚本来使用 awk 从 /proc/interrupts 文件中读取 eth 中断数,并找到每个 CPU 内核的中断总数。然后我想在 bash 中使用它们。文件的内容是;
CPU0 CPU1 CPU2 CPU3
47: 33568 45958 46028 49191 PCI-MSI-edge eth0-rx-0
48: 0 0 0 0 PCI-MSI-edge eth0-tx-0
49: 1 0 1 0 PCI-MSI-edge eth0
50: 28217 42237 65203 39086 PCI-MSI-edge eth1-rx-0
51: 0 0 0 0 PCI-MSI-edge eth1-tx-0
52: 0 1 0 1 PCI-MSI-edge eth1
59: 114991 338765 77952 134850 PCI-MSI-edge eth4-rx-0
60: 429029 315813 710091 26714 PCI-MSI-edge eth4-tx-0
61: 5 2 1 5 PCI-MSI-edge eth4
62: 1647083 208840 1164288 933967 PCI-MSI-edge eth5-rx-0
63: 673787 1542662 195326 1329903 PCI-MSI-edge eth5-tx-0
64: 5 6 7 4 PCI-MSI-edge eth5
我在这段代码中用 awk 读取这个文件:
#!/bin/bash
FILE="/proc/interrupts"
output=$(awk 'NR==1 {
core_count = NF
print core_count
next
}
/eth/ {
for (i = 2; i <= 2+core_count; i++)
totals[i-2] += $i
}
END {
for (i = 0; i < core_count; i++)
printf("%d\n", totals[i])
}
' $FILE)
core_count=$(echo $output | cut -d' ' -f1)
output=$(echo $output | sed 's/^[0-9]*//')
totals=(${output// / })
在这种方法中,我处理总核心数,然后处理每个核心的总中断,以便在我的脚本中对它们进行排序。但我只能处理总数数组中的数字,例如这个,
totals[0]=22222
totals[1]=33333
但是我需要将它们作为具有 CPU 内核名称的元组来处理。
totals[0]=(cPU1,2222)
totals[1]=(CPU',3333)
我想我必须将名称分配给一个数组,并将它们作为我的 SED 中的元组读入 bash。我怎样才能做到这一点?