0

我有一个LOG_FILENAME存储日志文件名称的 bash 变量。我想要做的是启动iostat -xnmp并获取存储在 bash 变量中的每个迭代匹配模式的每个记录的字段 9、10 和 11 DEVICE。迭代次数存储在timebash var 中。我想做的是:

iostat -xnmp 5 $time | awk -v log=$LOG_FILENAME "/$DEVICE/" '{print $9" "$10" "$11}' input >> $log

和其他人的很多变化ENVIRON......但仍然无法弄清楚我错在哪里。大多数时候我都会遇到语法错误。目前还没有特别的要求,所以任何解决方案都是合适的。

4

2 回答 2

0

如果 DEVICE 格式正确(例如,不包含 a /),则其中任何一个都应该起作用:

... | awk  "/$DEVICE/"'{print $9, $10, $11}' OFS=' ' >> $LOG_FILENAME

'(注意:和之间不能有任何空格")或

... | awk 'match($0, device) {print $9, $10, $11 >> log}' OFS=' ' \
            device="$DEVICE" log=$LOG_FILENAME
于 2013-04-01T11:41:09.980 回答
0

我对此的看法(一个衬里还可以,但人类更容易将其作为单独的行来阅读):

iostat -xnmp  $time | 
awk -v dev=$DEVICE  'index($0,dev)>0 {print $9,$10,$11}' >> $log

您从标准输入读取。 index($0,dev)>0被使用是因为我认为你有一个磁盘设备。 index($0,dev)>0对于学习 awk 的人来说,可以缩短到index($0,dev) 不太清楚。

于 2013-04-01T11:48:12.660 回答