【发布时间】:2019-12-13 23:05:03
【问题描述】:
试图在这里解决一个问题。我有一个包含许多行的文件,但我想过滤特定行,然后比较该行中的两个值,如果满足条件,我想显示该行。这将通过整个文件完成。我正在为此使用 BASH 脚本。
行格式:
<timestamp> <date> : <ServerName> <Device> <In>/<Out> <Value1>/<Value2>
行示例:
15:13:33 12/13/19 : Host1 Device1 In/Out 33/34
使用这个,我想做以下事情:
grep 用于“输入/输出”
在变量中将 33 和 34 分开
比较 33 和 34
如果 33 和 34 之间的 delta 大于“X”,则将整行显示为 标准输出。
到目前为止,我有:
#!/bin/bash
input="logfile.log"
while IFS= read -r line
do
echo $line
done < "$input"
我知道echo $line 在哪里,我可以执行命令。但我不确定如何“回显”它并在 while 循环中处理它。
我可以这样做:
line=`grep "In/Out" logfile.log`
var1=`grep "In/Out" logfile.log | awk -F" " '{ print $7 }' | awk -F/ '{ print $1 }'`
var2=`grep "In/Out" logfile.log | awk -F" " '{ print $7 }' | awk -F/ '{ print $2 }'`
And then compare, the difference, and if met, echo the $line value, but that feels very inefficient.
Any thoughts/input would be greatly appreciated.
【问题讨论】:
-
哎哟!每个变量分配三个子外壳和两个管道?还要避免将
`...`用于命令替换,而应使用$(...)。 -
感谢您提醒使用 $(...) - 已经习惯了使用其他的习惯。需要打破它。顺便说一句,是的,完全同意三个子壳很糟糕。不幸的是,它确实“工作”了,真的很草率!