将命令输出转换为 csv,带有时间戳

将命令输出转换为 csv,带有时间戳

我想使用终端命令测试速度连接:

./speedtest-cli

它返回这个:

Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Moscow, Russia (77.50.8.74)...
Selecting best server based on latency...
Hosted by East Telecom Ltd (Mytishchi) [10.81 km]: 7.433 ms
Testing download speed........................................
Download: 38.06 Mbit/s
Testing upload speed..................................................
Upload: 23.52 Mbit/s

我想将其转换为 csv 行,例如:

12-12-2016 12:01 ; 38.06 ; 23.52 ;
12-12-2016 12:11 ; 39.00 ; 21.12 ;
12-12-2016 12:21 ; 37.06 ; 25.00 ;

我正在尝试使用简单的 grep 函数来实现此目的:

grep 'Upload:' test.txt | sed 's/^.*: //'  >> test_res.txt

但这只是从文件中获取速度数字,并且仅重写其中一个参数。如何编写所需格式的精确转换。我对 bash 脚本相当陌生。

答案1

awk  -v date="$(date +%d-%m-%Y\ %H:%M)" -v OFS=';' '/Download:/ { d=$2; }
     /Upload:/ { print date, d, $2, ""; d="" }' speedtest

答案2

这是一个现成的解决方案:下载 speedtest-csv 脚本并授予其执行权限:

wget -O speedtest-csv https://raw.githubusercontent.com/HenrikBengtsson/speedtest-cli-extras/master/bin/speedtest-csv

chmod +x speedtest-csv

接下来将 speedtest-csv 移动到 /usr/bin/

mv speedtest-csv /usr/bin/

生成 CSV 标头

speedtest-csv --header >> /var/www/html/speedtest.csv

然后,根据您的需要修改输出,例如将最后一行更改为:

echo $start ";" $upload ";" $download
or
echo $start "Upload:" $upload "Download" $download

更新

我附上修改后的脚本,其结果如下:

bash speedtest-csv
2016-06-03 14:12:21 Upload: 258.19 Mbit/s Download 242.71 Mbit/s

在此输入链接描述

相关内容