我有一个脚本,它打印出单击服务器的平均时间,如下所示:
ping -c3 "${I}" | tail -1 | awk '{print $4}' | cut -d '/' -f 2 | sed 's/$/\tms/'当我点击服务器列表时,如何将行号添加到上面脚本的输出中?
当3台主机点击列表时,我的实际输出是:
6.924 ms
100.099 ms
7.756 ms我希望输出是这样的:
1,6.924 ms
2,100.099 ms
3,7,756 ms这样,excel就可以读到这个了:)谢谢!
发布于 2013-11-18 16:54:01
通过perl传输输出:
echo -e 'aa\nbb' | perl -ne 'print $., ",", $_'输出:
1,aa
2,bb发布于 2013-11-18 16:55:17
这是你想要的吗?
C=1
for I in 'host1' 'host2' 'host3'
do
ping -c3 "${I}" | tail -1 | awk '{print $4}' | cut -d '/' -f 2 | echo "$C,$(sed 's/$/\tms/')"
C=$((C+1))
done发布于 2013-11-19 02:59:28
行编号的标准工具是nl。将输出输送到nl -s,,即:
for I; do
ping -c3 "${I}" | awk -F/ 'END{print $5, "\tms"}'
done | nl -s,由于您还没有指定列表是如何生成的,所以我只是在命令行中显示要单击的主机列表的情况。请注意,这在行号之前引入了前导空格,因此您可能希望通过sed筛选删除。
当然,这个脚本大部分时间都在等待ping,您可能希望通过并行运行ping来加快它的速度。在这种情况下,最好在开头添加行号,以便在输出中获得稳定的排序:
line=1
{ for I; do ping -c3 $I | awk -F/ 'END{
printf( "%d,%s\tms\n", line,$5 )}' line=$line &
: $((line +=1 ))
done; wait; } | sort -n在这种情况下,wait不是必需的,因为sort将阻塞直到所有的ping关闭它们的输出,但是如果您在sort之前添加了管道中的任何进程,而这些进程在执行任何处理之前不一定要等待它们的所有输入,那么wait就变得必要了,所以保持wait的位置是一个很好的做法。
https://stackoverflow.com/questions/20053050
复制相似问题