2015-07-06 2 views
0

У меня есть сценарий, который получает данные из нескольких источников, и я хочу отформатировать его вывод в формате таблицы HTML.Формат выходного файла из сценария bash в формат таблицы HTML

Отредактировано:

Формат на данный момент:

[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-таблицы в чем-то вроде этого

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, поэтому я застрял.

Мой attemp используя код на ответ:

awk 'BEGIN{print "ENVIRONMENT BACKEND_VERSION DB_VERSION EVENT1 EVENT2 SCHEMA NODES NODE_NO VPOOL VERSION IP" } NF==1{env=$0; t=1; next;} t==1{t++; be=$3; next;} t==2{t++; db=$3; next;} t==3{printf "%s %s %s %s\n", env, be, db, $0; 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 

Благодарности

+1

Как эта таблица html? Вы хотите, чтобы HTML был создан, чтобы создать эту таблицу? – 123

+0

Я хочу преобразовать свой список в формат таблицы HTML. У меня есть этот вывод, сгенерированный на скрипте bash. – Haohmaru

+0

, вероятно, было бы легче изменить сценарий генерации bash, который уже имеет контекст .. не могли бы вы разместить этот скрипт – amdixon

ответ

1
$ awk 'BEGIN{print "Envirnoment BackEndVersion DBVersion EventName Status Schema" } NF==1{env=$0; t=1; next;} t==1{t++; be=$3; next;} t==2{t++; db=$3; next;} t==3{printf "%s %s %s %s\n", env, be, db, $0; 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 

После того, как вы измените вопрос с вашими попытками, Прокомментируйте на этот ответ, чтобы я добавил объяснение.

+0

Я впечатлен, теперь я могу получить действительно хороший формат и отправить в другой файл. Есть ли у вас какие-либо идеи о том, как поместить это в таблицу HTML с помощью awk? Огромное вам спасибо за это. – Haohmaru

+0

^^ Отредактируйте мой один liner-скрипт выше. Вы можете создавать HTML без особых усилий. – anishsane

+0

, если у вас есть время, вы можете поделиться объяснением этого кода, я очень хочу знать, что происходит в этом заявлении awk. Many Thanks – Haohmaru

0

С выше форматом можно получить в формате HTML с помощью:

awk -v header=1 'BEGIN{OFS="\t"; print "<html><body><table>" } 
{ 
     gsub(/</, "\\&lt;") 
     gsub(/>/, "\\&gt;") 
     gsub(/&/, "\\&gt;") 
     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.

Смежные вопросы