2016-11-02 3 views
1

Просто вставляйте arround в linux и привязывайте к AWK. Как я могу поменять файл в формате CSV на форматированный в формате HTML. Например ... вот информация, которую я загрузил в свою скорлупу ...AWK для преобразования CSV в HTML Таблица

user$ cat table.csv 
Ep#,Featured Film,Air date 
211,First Spaceship on Venus,12/29/90 
310,Fugitive Alien,08/17/91 
424,Manos: The Hands of Fate,01/30/93 

Затем после запуска кода это то, что должно быть выведено.

user$ csv2html.awk table.csv 
<html><body><table> 
<tr> 
<th>Ep#</th> 
<th>Featured Film</th> 
<th>Air date</th> 
</tr> 
<tr> 
<td>211</td> 
<td>First Spaceship on Venus</td> 
<td>12/29/90</td> 
</tr> 
<tr> 
<td>310</td> 
<td>Fugitive Alien</td> 
<td>08/17/91</td> 
</tr> 
<tr> 
<td>424</td> 
<td>Manos: The Hands of Fate</td> 
<td>01/30/93</td> 
</tr> 
</table></body></html> 

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

#!/bin/awk 
print "<tr> 
for(i = 1; i <= NF; i++) 
    print "<td> "$i" </td" 
#print "</tr>" 
+0

Добро пожаловать в переполнение стека! Хорошо, что ваш вопрос включает небольшой пример ввода и вывода. Было бы еще лучше, если бы вопрос также показал, что вы пробовали до сих пор, то есть, если вы показали свое исследование. – RJHunter

+0

@ RJHunter обновлен – cyclONEnation

ответ

1

Есть много способов сделать это в AWK, но мой предпочтительный способ код ниже. Я включил некоторые пояснения в комментарии в коде. Надеюсь это поможет!

Для запуска интерфейса командной строки, сохранить код в файле, например 'csv_to_html.awk' и выполнить с 'table.csv' в качестве аргумента:

$ chmod +x csv_to_html.awk 
$ ./csv_to_html.awk table.csv > table.html 

Код:

#!/bin/awk -f 

# Set field separator as comma for csv and print the HTML header line 
BEGIN { 
    FS=","; 
    print "<html><body><table>" 
} 
# Function to print a row with one argument to handle either a 'th' tag or 'td' tag 
function printRow(tag) { 
    print "<tr>"; 
    for(i=1; i<=NF; i++) print "<"tag">"$i"</"tag">"; 
    print "</tr>" 
} 
# If CSV file line number (NR variable) is 1, call printRow fucntion with 'th' as argument 
NR==1 { 
    printRow("th") 
} 
# If CSV file line number (NR variable) is greater than 1, call printRow fucntion with 'td' as argument 
NR>1 { 
    printRow("td") 
} 
# Print HTML footer 
END { 
    print "</table></body></html>" 
} 
1

другой аналогичный awk,

BEGIN{header = "<html><body><table>"; print header} 
     {c = NR == 1 ? "th" : "td"; 
      OFS = et(c) bt(c); 
      $1 = $1; 
      print wrap("tr", wrap(c,$0)) } 
     END{gsub("<","</",header); print header } 

    function wrap(t, v) { return bt(t) v et(t)} 
    function bt(t) {return "<" t ">"} 
    function et(t) {return "</" t ">"} 

вместо зацикливания элементов использует OFS, чтобы вставить соответствующий XML-тег s.

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