Nieuws:

Welkom, Gast. Alsjeblieft inloggen of registreren.
Heb je de activerings-mail niet ontvangen?

Auteur Topic: Tab-delimited Text file to Html met AWK  (gelezen 635 keer)

max250564

  • Gast
Tab-delimited Text file to Html met AWK
« Gepost op: 2007/11/18, 16:36:39 »
Hallo,

Ik ben net begonnen met Ubuntu 7.10 te gebruiken en zoek nu mijn weg in de scripting.
Ik heb een tab-delimited txt-file en zou van bepaalde kolommen een html-pagina willen maken.
Via google ben ik reeds bij AWK terecht gekomen maar hier loopt het niet echt vlotjes.

Als ik volgend script probeer te draaien, krijg ik de melding "unexpected token '.'"

Kan iemand mij hierbij even helpen?
Tevens zit ik nog met volgende vragen:
1) Wat is de standaar lengte van een record in AWK, en hoe kan ik deze verlengen indien blijkt dat mijn records langer zijn?
2) Hoe kan ik (zonder alle records te doorlopen) in het begin van het script het aantal records te weten komen?

De code zover is:

BEGIN {

  // Set the field separator to tab

  FS = "\t";
  RS = "\n";
  FILENAME = "/home/dries/Documenten/nopic.txt";



  // Output the HTML header

  print "";

  print "";

  print "  Overview Movies";

  print "\r\n";

  print "\r\n";

  print "Overview made on: " + systime;
  print "Number of Entries= ";
  print "";

}

{

  // Set the column type

  // The first data row contains headers

  if(NR == 1)

    cellType = "th";

  else

    cellType = "td";



  // Open the row

  print "  ";



  // Loop over the fields

  for(i = 1; i <= NF; i++)

  {

    // Print the cell

    print "    <" cellType ">" $37 ""
   if(match(cellType, "th"))
   {
      print "      <" cellType "> Season "
   }
   else
   {
      print "      <" cellType ">" $39 " "
   }
   print "   <" cellType ">" $44 "
      <" cellType ">" $35 "
      <" cellType ">" $31 "
      <" cellType ">" $25 "
      <" cellType ">" $42 "";
    //print "    <" cellType ">" myData "";

  }



  // Close the row

  print "  ";

}

END {

  // Output the HTML footer

  print "\r\n";

}

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Tab-delimited Text file to Html met AWK
« Reactie #1 Gepost op: 2007/11/18, 18:47:06 »
1) Die vraag snap ik niet goed
2) Ik zou het doen via een voorgaand script, via wc -l of ook via awk

Ik weet niet hoe jouw opmaak er ongeveer uitziet maar ik heb een voorbeeld geschreven aan de hand van dit bestand:

test.txt
Citaat
Season  Field1  Field2  Field3  Field4
1       a       aa      aaa     aaaa
2       b       bb      bbb     bbbb
3       c       cc      ccc     cccc
4       d       dd      ddd     dddd
99      z       zz      zzz     zzzz
het script zelf is Bash met Awk, gebaseerd op jouw begin, maar wel nog helemaal anders
Citaat
fileName="test.txt"
htmlFile="test.html"

## CREATE HTML HEADER
wc -l $fileName|awk '{
  print ""
  print ""
  print "  Overview Movies"
  print ""
  print ""
  print strftime("Overview made on: %m/%d/%Y %H:%M:%S", systime()) "
"
  print "Number of Entries: " $1-1 # minus 1 because we do not count the header
  print "
"
}' > $htmlFile

## PROCESS THE FILE
awk 'BEGIN {
  FS = "\t";  # Field seperator
  RS = "\n";  # Record seperator
}

{
  # Set the column type
  # The first data row contains headers
  if(NR == 1)
    cellType = "th";
  else
    cellType = "td";

  # Open the row
  print "  ";

  # Loop over the fields
  for(i = 1; i <= NF; i++)
  {
    print "    <" cellType ">" $i ""
  }

  # Close the row
  print "  ";
}

END {
  # Output the HTML footer
  print "
\r\n\r\n";
}' $fileName >> $htmlFile

## OUTPUT INFORMATION TO TERMINAL
echo "The HTML table for \"$fileName\" has been written to \"$htmlFile\"."
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

max250564

  • Gast
Tab-delimited Text file to Html met AWK
« Reactie #2 Gepost op: 2007/11/18, 20:13:32 »
profoX, bedankt voor je schitterende antwoord.
Omtrend vraag 1, ik had ergens gelezen dat AWK een default record lengte heeft, en wanneer je een langere record lengte gebruikt, dit problemen kan geven met de verwerking.

Ik ga dit even proberen en zien welke output het geeft.
Keep you posted en nogmaals dank!

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Tab-delimited Text file to Html met AWK
« Reactie #3 Gepost op: 2007/11/18, 20:16:26 »
Oh, dat zou kunnen.
Ik gebruik zelf niet zo erg vaak Awk.
Als je een probleem tegenkomt met die recordlengte ofzo dan laat je 't maar weten. Laten we hopen dat het gewoon niet voorkomt.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

max250564

  • Gast
Tab-delimited Text file to Html met AWK
« Reactie #4 Gepost op: 2007/11/18, 21:12:24 »
Ok,

Bijna het gewenste resultaat.
Ik heb het script tot het volgende aangepast (aangezien hij de html tags op een of andere manier niet wou herkennen):

#!/bin/sh
fileName="nopic.txt"
htmlFile="nopic.html"
length=`wc -l $fileName`

## PROCESS THE FILE
awk 'BEGIN {
  FS = "\t";  # Field seperator
  RS = "\n";  # Record seperator
  print " Overview MoviesOverview made on
Number of Entries";
}

{
  # Open the row
  print " ";

  # Set the column type
  # The first data row contains headers
if(NR == 1)
{
    cellType = "th";
       print "<" cellType " width=\"50\">" $37 "<" cellType "width=\"40\"> Season <" cellType " width=\"100\">" $44 "<" cellType " width=\"75\">" $35 "<" cellType " width=\"75\">" $31 "<" cellType " width=\"75\">" $25 "<" cellType " width=\"50\">" $42 "";
}
else
{
    cellType = "td";
       print "<" cellType " width=\"50\">" $37 "<" cellType " width=\"40\">" $39 "<" cellType " width=\"100\">" $44 "<" cellType " width=\"75\">" $35 "<" cellType " width=\"75\">" $31 "<" cellType " width=\"75\">" $25 "<" cellType " width=\"50\">" $42 "";
}
}

END {
  # Output the HTML footer
  print "
\r\n\r\n";
}' $fileName >> $htmlFile

## OUTPUT INFORMATION TO TERMINAL
echo "The HTML table for \"$fileName\" has been written to \"$htmlFile\"."
echo $length
echo $length-1



Gevolg:
Hij verwerkt perfect alle nodige info van de records, alleen de headers staan nog niet correct. Hij voegt 'season' voor het begin van de tabel toe en bij gevolg staan alle (buiten de eerste) kolommen fout.

Kort overzicht van de output:

Overview made on
Number of Entries Season
Title   Year    Storage Medium   Rating   Location   Webpage
24 (2001)   1-6   2001    Divx   5 out of 5      http://www.imdb.com/title/tt0285331
25th Hour (2002)      2002    Divx   4 out of 5      http://www.imdb.com/title/tt0307901
28 Days Later... (2002)      2002    Divx   not yet rated   Zie 10 Items Or Less   http://www.imdb.com/title/tt0289043
28 Weeks Later (2007)      2007    Divx   not yet rated   Zie 10 Items Or Less   http://www.imdb.com/title/tt0463854
300 (2006)      2006    Divx   4 out of 5      http://www.imdb.com/title/tt0416449

(voor het geval het niet duidelijk moest zijn aan de hand van de output, de kolom waarin de gegevens van season staan, draagt de titel year enz...)

Tevens nog uit te zoeken is hoe ik de datum en het aantal rijen moet integreren want dat geeft ook nog een probleempje.

Offline profoX

  • Lid
    • wesley
    • Lionslink
  • Steunpunt: Nee
Tab-delimited Text file to Html met AWK
« Reactie #5 Gepost op: 2007/11/18, 21:15:59 »
Een beetje een onduidelijke uitleg hoor.
Kan je eens een aantal lijnen van je bronbestand laten zien? (nopic.txt).
Dat zal makkelijker testen zijn voor mij.
Human Knowledge Belongs To The World -- Antitrust (2001)
Nederlandstalige Ubuntu documentatie van Ubuntu-NL (wiki)

max250564

  • Gast
Tab-delimited Text file to Html met AWK
« Reactie #6 Gepost op: 2007/11/19, 07:58:58 »
Bedankt voor de hulp, profoX, maar het is ondertussen opgelost :)

via wat knip en plakwerk in de code is het toch tot een goed resultaat gekomen.