将 bash 脚本的输出文件格式化为 HTML table 格式
Format output file from a bash script into HTML table format
我有一个从多个来源获取数据的脚本,我想将其输出格式化为 HTML table 格式。
已编辑:
当前格式:
[Environment Name]
[Back end version]
[DB Version]
[event1 status] [event2 status] [event schema] [nodes] [node_no] [vpool] [ver] [node_ip]
当前列表:
grid-dev
BE version: 6.0
Database version: 10
DISABLED DISABLED dev_1 3 01 1 10.0.19-MariaDB 10.101.666.11:3306
grid-test
BE version: 7.0
Database version: 11
ENABLED ENABLED test_1 2 02 4 10.0.17-MariaDB 10.108.777.14:3306
grid-test
BE version: 7.0
Database version: 11
SLAVESIDE_DISABLE SLAVESIDE_DISABLE test_2 1 02 3 10.0.17-MariaDB 10.108.777.47:3306
grid-staging
BE version: 6.0
Database version: 10
DISABLED DISABLED staging_1 2 02 4 10.0.18-MariaDB 10.109.888.22:3306
并且我想将它格式化为 HTML table 这样的格式
ENVIRONMENT BACKEND_VERSION DB_VERSION EVENT1 EVENT2 SCHEMA NODES NODE_NO VPOOL VERSION IP
----------------------------------------------------------------------------------------------------------------------------------------------------------
grid-dev 6 10 DISABLED DISABLED dev_1 3 01 1 10.0.19-MariaDB 10.101.666.11:3306
grid-test 7 11 ENABLED ENABLED test_1 2 02 4 10.0.17-MariaDB 10.108.777.14:3306
grid-test 7 11 SLAVES... SLAVESI... test_2 2 01 3 10.0.17-MariaDB 10.108.777.47:3306
grid-staging 6 10 DISABLED DISABLED stag_1 2 02 4 10.0.18-MariaDB 10.109.888.22:3306
是否可以使用 bash 脚本来完成?任何帮助将不胜感激 我是 bash 和 HTML 的新手,所以我被困住了。
我尝试使用答案中的代码:
awk 'BEGIN{print "ENVIRONMENT BACKEND_VERSION DB_VERSION EVENT1 EVENT2 SCHEMA NODES NODE_NO VPOOL VERSION IP" } NF==1{env=[=16=]; t=1; next;} t==1{t++; be=; next;} t==2{t++; db=; next;} t==3{printf "%s %s %s %s\n", env, be, db, [=16=]; env="#";be="#";db="#";}' < "$output" | column -t | tr '#' ' ' >> "$dbstats"
输出是
ENVIRONMENT BACKEND_VERSION DB_VERSION EVENT1 EVENT2 SCHEMA NODES NODE_NO VPOOL VERSION IP
grid-dev56.0 136 grid_dev Database version: 138
DISABLED DISABLED grid_systest 3 03 1 10.0.19-MariaDBgrid-systest56.0
Database version: 138
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_systest 3 01 1 10.0.19-MariaDBgrid-systest56.0
Database version: 138
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_systest 3 02 1 10.0.19-MariaDBgrid-staging56.0
Database version: 136
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_staging 3 03 1 10.0.19-MariaDBgrid-staging56.0
Database version: 136
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_staging 3 02 1 10.0.19-MariaDBgrid-staging56.0
Database version: 136
ENABLED ENABLED grid_staging 3 01 1 10.0.19-MariaDBgrid-production56.0
Database version: 136
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_production 3 03 1 10.0.19-MariaDBgrid-production56.0
Database version: 136
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_production 3 02 1 10.0.19-MariaDBgrid-production56.0
Database version: 136
DISABLED SLAVESIDE_DISABLED grid_production 3 01 1 10.0.19-MariaDB
谢谢
$ awk 'BEGIN{print "Envirnoment BackEndVersion DBVersion EventName Status Schema" } NF==1{env=[=10=]; t=1; next;} t==1{t++; be=; next;} t==2{t++; db=; next;} t==3{printf "%s %s %s %s\n", env, be, db, [=10=]; env="#";be="#";db="#";}' <input_file | column -t | tr '#' ' '
Envirnoment BackEndVersion DBVersion EventName Status Schema
grid-dev 6.0 10 swap DISABLED dev_1
busy DISABLED dev_1
grid-test 7.0 11 swap ENABLED test_1
busy ENABLED test_1
grid-staging 6.0 10 swap DISABLED staging_1
busy DISABLED staging_1
grid-production 5.0 9 swap ENABLED prod
busy ENABLES prod
在你尝试编辑你的问题后,请对这个答案发表评论,以便我添加解释。
使用上述格式可以使用以下方法进入 HTML 格式:
awk -v header=1 'BEGIN{OFS="\t"; print "<html><body><table>" }
{
gsub(/</, "\<")
gsub(/>/, "\>")
gsub(/&/, "\>")
print "\t<tr>"
for(f = 1; f <=NF; f++) {
if(NR == 1 && header) {
printf "\t\t<th>%s</th>\n", $f
}
else printf "\t\t<td>%s</td>\n", $f
}
print "\t</tr>"
}
END {
print "</table></body></html>"
}' "$FORMATED_TABLE" )
这对想要转换成 HTML 的人可能有用。
我知道这是对这个问题的较晚回答,但会帮助那些谷歌搜索解决方案,将 bash 命令输出转换为 html table 格式。有一个简单的脚本可用于执行此操作:https://sourceforge.net/projects/command-output-to-html-table/ 可用于将任何命令输出或文件转换为漂亮的 html table 格式。您可以为此脚本指定分隔符,包括制表符、换行符等特殊分隔符,并在顶部使用 html 搜索以 html table 格式获取输出。
只需下载脚本,将其解压缩并发出以下命令:
cat test.txt | { cat ; echo ; } | ./tabulate.sh -d " " -t "My Report" -h "My Report" > test.html
这假定字段由 space 字符分隔,如其他解决方案所指定:
如果分隔符是制表符,则将上面的-d " "改为-d $'\t'。
生成的输出文件附在此处:https://sourceforge.net/projects/my-project-files/files/test.html/download
我有一个从多个来源获取数据的脚本,我想将其输出格式化为 HTML table 格式。
已编辑:
当前格式:
[Environment Name]
[Back end version]
[DB Version]
[event1 status] [event2 status] [event schema] [nodes] [node_no] [vpool] [ver] [node_ip]
当前列表:
grid-dev
BE version: 6.0
Database version: 10
DISABLED DISABLED dev_1 3 01 1 10.0.19-MariaDB 10.101.666.11:3306
grid-test
BE version: 7.0
Database version: 11
ENABLED ENABLED test_1 2 02 4 10.0.17-MariaDB 10.108.777.14:3306
grid-test
BE version: 7.0
Database version: 11
SLAVESIDE_DISABLE SLAVESIDE_DISABLE test_2 1 02 3 10.0.17-MariaDB 10.108.777.47:3306
grid-staging
BE version: 6.0
Database version: 10
DISABLED DISABLED staging_1 2 02 4 10.0.18-MariaDB 10.109.888.22:3306
并且我想将它格式化为 HTML table 这样的格式
ENVIRONMENT BACKEND_VERSION DB_VERSION EVENT1 EVENT2 SCHEMA NODES NODE_NO VPOOL VERSION IP
----------------------------------------------------------------------------------------------------------------------------------------------------------
grid-dev 6 10 DISABLED DISABLED dev_1 3 01 1 10.0.19-MariaDB 10.101.666.11:3306
grid-test 7 11 ENABLED ENABLED test_1 2 02 4 10.0.17-MariaDB 10.108.777.14:3306
grid-test 7 11 SLAVES... SLAVESI... test_2 2 01 3 10.0.17-MariaDB 10.108.777.47:3306
grid-staging 6 10 DISABLED DISABLED stag_1 2 02 4 10.0.18-MariaDB 10.109.888.22:3306
是否可以使用 bash 脚本来完成?任何帮助将不胜感激 我是 bash 和 HTML 的新手,所以我被困住了。
我尝试使用答案中的代码:
awk 'BEGIN{print "ENVIRONMENT BACKEND_VERSION DB_VERSION EVENT1 EVENT2 SCHEMA NODES NODE_NO VPOOL VERSION IP" } NF==1{env=[=16=]; t=1; next;} t==1{t++; be=; next;} t==2{t++; db=; next;} t==3{printf "%s %s %s %s\n", env, be, db, [=16=]; env="#";be="#";db="#";}' < "$output" | column -t | tr '#' ' ' >> "$dbstats"
输出是
ENVIRONMENT BACKEND_VERSION DB_VERSION EVENT1 EVENT2 SCHEMA NODES NODE_NO VPOOL VERSION IP
grid-dev56.0 136 grid_dev Database version: 138
DISABLED DISABLED grid_systest 3 03 1 10.0.19-MariaDBgrid-systest56.0
Database version: 138
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_systest 3 01 1 10.0.19-MariaDBgrid-systest56.0
Database version: 138
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_systest 3 02 1 10.0.19-MariaDBgrid-staging56.0
Database version: 136
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_staging 3 03 1 10.0.19-MariaDBgrid-staging56.0
Database version: 136
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_staging 3 02 1 10.0.19-MariaDBgrid-staging56.0
Database version: 136
ENABLED ENABLED grid_staging 3 01 1 10.0.19-MariaDBgrid-production56.0
Database version: 136
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_production 3 03 1 10.0.19-MariaDBgrid-production56.0
Database version: 136
SLAVESIDE_DISABLED SLAVESIDE_DISABLED grid_production 3 02 1 10.0.19-MariaDBgrid-production56.0
Database version: 136
DISABLED SLAVESIDE_DISABLED grid_production 3 01 1 10.0.19-MariaDB
谢谢
$ awk 'BEGIN{print "Envirnoment BackEndVersion DBVersion EventName Status Schema" } NF==1{env=[=10=]; t=1; next;} t==1{t++; be=; next;} t==2{t++; db=; next;} t==3{printf "%s %s %s %s\n", env, be, db, [=10=]; env="#";be="#";db="#";}' <input_file | column -t | tr '#' ' '
Envirnoment BackEndVersion DBVersion EventName Status Schema
grid-dev 6.0 10 swap DISABLED dev_1
busy DISABLED dev_1
grid-test 7.0 11 swap ENABLED test_1
busy ENABLED test_1
grid-staging 6.0 10 swap DISABLED staging_1
busy DISABLED staging_1
grid-production 5.0 9 swap ENABLED prod
busy ENABLES prod
在你尝试编辑你的问题后,请对这个答案发表评论,以便我添加解释。
使用上述格式可以使用以下方法进入 HTML 格式:
awk -v header=1 'BEGIN{OFS="\t"; print "<html><body><table>" }
{
gsub(/</, "\<")
gsub(/>/, "\>")
gsub(/&/, "\>")
print "\t<tr>"
for(f = 1; f <=NF; f++) {
if(NR == 1 && header) {
printf "\t\t<th>%s</th>\n", $f
}
else printf "\t\t<td>%s</td>\n", $f
}
print "\t</tr>"
}
END {
print "</table></body></html>"
}' "$FORMATED_TABLE" )
这对想要转换成 HTML 的人可能有用。
我知道这是对这个问题的较晚回答,但会帮助那些谷歌搜索解决方案,将 bash 命令输出转换为 html table 格式。有一个简单的脚本可用于执行此操作:https://sourceforge.net/projects/command-output-to-html-table/ 可用于将任何命令输出或文件转换为漂亮的 html table 格式。您可以为此脚本指定分隔符,包括制表符、换行符等特殊分隔符,并在顶部使用 html 搜索以 html table 格式获取输出。
只需下载脚本,将其解压缩并发出以下命令:
cat test.txt | { cat ; echo ; } | ./tabulate.sh -d " " -t "My Report" -h "My Report" > test.html
这假定字段由 space 字符分隔,如其他解决方案所指定:
如果分隔符是制表符,则将上面的-d " "改为-d $'\t'。
生成的输出文件附在此处:https://sourceforge.net/projects/my-project-files/files/test.html/download