我正在运行一个bash脚本,该脚本查看错误日志并生成一个在Mac终端中打印的报告。
目前,输出如下:
This error report is derived from Command Logs from ________ to __________.
IP addresses:
109.xx.xxx.xxx
Error Codes List:
(code 12)
(code 30)
Common Errors - Count:
Code 2:
Code 10:
Code 11:
Code 12: 237
Code 14:
Code 20:
Code 23:
Code 30: 5
Code 35:
Code 37:
Code 52:
/usr/local/bin/backerr: line 45: `$skipping': not a valid identifier
Total: 242
Total Files Transferred:
3558
Count complete.
The following are details for each error:
// all of the 242 above-referenced lines //
Skipped files:
// lists all of the lines that have the word 'skipping\ ' //
如您所见,我没有正确的标识符:
/usr/local/bin/backerr: line 45: `$skipping': not a valid identifier
这是我必须使用'跳过\'来检测行的代码。在其中,计算总数,并打印代码XX下的总数:总计在上面。另外,我想要跳过'总计将添加到'总计:242'。
count=()
total=0
while read skipping; do
(( count[$skipping]++, total++ ))
done < <(grep 'skipping\ ' $input_variable)
for $skipping in $input_variable; do
echo "Skipped: ${count[$skipping]}"
done
我预期的输出&#34;常见错误 - 计数:&#34;部分应如下:
Common Errors - Count:
Code 2:
Code 10:
Code 11:
Code 12: 237
Code 14:
Code 20:
Code 23:
Code 30: 5
Code 35:
Code 37:
Code 52:
Skipped: 107 (I made up this number for this question)
Total: 349
我被困在这里。请帮忙。
作为解决方法,而不是使用下面的代码:
while read skipping; do
(( count[$skipping]++, total++ ))
done < <(grep 'skipping\ ' $input_variable)
for $skipping in $input_variable; do
echo "Skipped: ${count[$skipping]}"
done
我将其替换为:
echo "Total Skipped Files: " ; egrep -c 'skipping' $input_variable ;
但是,这并没有像我原先设想的那样产生理想的结果。
答案 0 :(得分:2)
您的for
循环不应该为索引变量设置美元符号:
for skipping in $input_variable; do
^^^