Преобразуйте текстовый файл с разделенными от двоеточия значениями к таблице HTML

У меня есть большой файл больше чем с 10 000 записей, отформатированных как ниже.

Это должно быть преобразовано в таблицу HTML

Я попробовал различные способы преобразовать в csv и затем к HTML и т.д., но я до сих пор не смог получить желаемый вывод

Data.txt

Name       : john
age        : 20
tag id     : 1234567
Name       : Mark
age        : 40
tag id     : 832245
Name       : tom
age        : 60
tag id     : 789324
......

Я хочу, чтобы это было преобразовано в таблицу "HTML" как это:

Name    Age   Tagid
John     20   1234567
Mark    40     832245
tom     60     789324

Я должен обработать файлы 10 000 записей. Как я могу сделать это?

2
задан 30 June 2018 в 07:47

2 ответа

Это было бы намного короче, если бы я знал, как сделать несколько поисковых замен в sed., который я не делаю. О, хорошо. после этого это стало глупым. никакой awk не требуется. Я предполагаю, что Ваш файл данных называют bs.dat и что Вы хотите csv для миграции на реальную систему баз данных позже. выводу в потрясающий файл HTML также..., возможно, понадобится некоторый css. Этот паршивый вывод html5 совместимый. (как)

#!/bin/bash
touch me lel.html
rm me lel.html
touch me p1 p2 p3 p4 lel.html
#Fix BS data make a proper csv
c=","
#remove spaces
cat bs.dat  | sed 's/ //g' > p1
#remove Name:
cat p1  | sed 's/Name://g' > p2
#Remove age:
cat p2  | sed 's/age://g' > p3
#remove tagid:
cat p3  | sed 's/tagid://g' > p4
#make a csv
file=p4
i=1
while read line
    do
        if [ "$i" = "1" ]; then
            l1=$line$c && i=2 
        elif [ "$i" = "2" ]; then
            l2=$l1$line$c && i=3
        elif [ "$i" = "3" ]; then
            l3=$l2$line >> me && i=1 && echo $l3 >> me
        else
            echo "something went wrong: $line"
        exit
        fi    
    done <"$file"
rm p1 p2 p3 p4
#Cool now we have a proper csv for later when we need to migrate to a real database
#ok lets make some html
touch lel.html

echo "<!DOCTYPE html><html><head><meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">" > lel.html
echo "<meta content=\"code, bash, lolz\" name=\"keywords\" /><title>IDK what</title></head><body>" >> lel.html
echo "<pre>Name          Age          ID  " >> lel.html
while IFS=, read col1 col2 col3
do
    echo "$col1 $col2 $col3" >> lel.html
done < me

echo "</pre></body></html>" >> lel.html 
firefox lel.html

, Учитывая, что у Вас есть большой файл данных, можно решить удалить p1-p4 файлы ранее. вывод csv будет меньшим файлом, как будет все последовательные выводы, но это - интенсивный диск, я приложил Нулевое усилие для эффективности & сохранение использования ресурсов.

Имена Also:The будут Продвинуты вместе. Ожидайте, я не вижу FirstName LastName в этих данных. Я предполагаю, что они на самом деле существуют, но были опущены для простоты... Существует простая фиксация к этому, с помощью REGEX., где существует [a-z] [A-Z] в первом значении столбца, вставьте пространство

0
ответ дан 2 December 2019 в 02:59

Работы с простофилей или nawk, но не mawk.

awk -F '[[:blank:]]*:[[:blank:]]*' '
    BEGIN {print "<table><thead><tr><th>Name</th><th>Age</th><th>Tagid</th></tr></thead><tbody>"}
    {
        name  = $2; getline
        age   = $2; getline
        tagid = $2
        print "<tr><td>" name "</td><td>" age "</td><td>" tagid "</td></tr>"
    }
    END {print "</tbody></table>"}
' Data.txt > Data.html

Это предполагает, что будет точно 3 строки для каждой записи, на имя порядка, возраст, tagid

3
ответ дан 2 December 2019 в 02:59

Другие вопросы по тегам:

Похожие вопросы: