2012-07-23 93 views
2

我有一个awk脚本,用于获取系统中总的eth中断的数量。在bash中使用awk变量

#!/bin/bash 

FILE="/proc/interrupts" 

awk 'NR==1 { 
core_count = NF 
print "core count: ", core_count 
next 
} 

/eth/ { 
for (i = 2; i <= 2+core_count; i++) 
totals[i-2] += $i 
} 

END { 
print "Totals" 
for (i = 0; i < core_count; i++) 
printf("CPU%d: %d\n", i, totals[i]) 
} 
' $FILE 

在bash结束时,我有core_count和totals数组。但是接下来,我需要使用这些变量,我怎样才能在脚本的其余部分使用它们?换句话说,您如何将它们全球化?

回答

1
#!/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///}) 
echo CC: $core_count total0 ${totals[0]} total1 ${totals[1]} 
+1

感谢@perreal它是非常有用 – barp 2012-07-23 06:24:26

+0

为了避免重复'回声。| ..'。代码,'set $ output'将标记输出并用标记值替换'$ 1','$ 2'等。还要注意'echo'有问题,应该避免。一般来说,至少应引用“回声”字符串。 – tripleee 2012-07-23 07:28:25

2

你不能。回声出来,和他们拉在

{ read core_count ; read -a totals ; } < <(echo -e "2\n4 5")