Verwenden von bash zum Exportieren einer durch Kommas getrennten Liste in HTML

660
Aryat Mapreh

Ich habe eine durch Cxomma getrennte csv-Datei, die ich in eine benutzerdefinierte HTML-Datei umwandeln möchte, und ich bin auf ein anderes Skript gestoßen, das es gemacht hat, aber es ist nichts anderes für mich, da ich https://www.tutorialspoint.com/execute_bash_online verwende .php um es auszuführen.

Hier ist das Skript, das ich gefunden habe: https://unix.stackexchange.com/questions/105501/convert-csv-to-html-table

Mein Problem ist, dass mein Output ein bisschen anders sein muss und etwas an ECHO wirklich einen Kampf aufgibt. Hier ist ein Beispiel meiner Liste:

Produkt, 100 USD Mit diesem Skript möchte ich das so konvertieren, dass es wie folgt aussieht: Produkt 100 USD

Grundsätzlich wird die Liste in 2 Zellen aufgeteilt. Aber das Echo streift immer wieder ", also ist es nur ein Chaos. Ich weiß nicht, ob es darum geht, dass der Bash-Emulator Zeilen umgibt, aber ich bekomme immer Fehler", wobei es scheint, dass "" und "tr" sowie "td" ein Befehl ist .

Derzeit sieht mein Skript so aus, und es spiegelt wider, wie sehr ich mich mit dem Echo beschäftigt habe.:

while read INPUT ; do echo ""<tr onmouseover="this.style.backgroundColor='#ffff66';""; echo ""onmouseout="this.style.backgroundColor='#d4e3e5';>"; echo ""<td>$</b></td></tr>";"" done 

Und das erzeugt:

$bash -f main.sh main.sh: line 2: tr: No such file or directory main.sh: line 4: ; echo <td>six</td><td><b>nine</td><td><b>twelve</b></td></tr>: No such file or directory main.sh: line 4: : command not found  

Ich habe wie verrückt mit Echo experimentiert, aber jetzt bin ich am Ende meines Witzes. Alle helfen sehr und dankbar angenommen.

2

3 Antworten auf die Frage

7
glenn jackman

Ihr Zitat ist falsch, insbesondere die doppelten Anführungszeichen.

Lassen Sie uns zusammenbrechen, was Sie haben, die zusammengeketteten Bits

echo ""<tr onmouseover="this.style.backgroundColor='#ffff66';""; 
  1. der Echo-Befehl
  2. eine leere Zeichenfolge ""
  3. eine Umleitung <tr- hier kommt der Fehler "Datei nicht gefunden"
  4. ein Leerzeichen
  5. ein Faden onmouseover="this.style.backgroundColor='#ffff66';"
  6. ein offenes Anführungszeichen und ein Semikolon, das erste Zeichen der nächsten Zeichenfolge

So korrigieren Sie Ihre Echo-Befehle:

while read INPUT ; do echo "<tr onmouseover=\"this.style.backgroundColor='#ffff66'\"" echo "onmouseout="this.style.backgroundColor='#d4e3e5'>" echo "<td>$</b></td></tr>" done 

Wenn Sie eine Kombination aus einfachen und doppelten Anführungszeichen haben, ist ein Heredoc sehr gut lesbar. Verwenden Sie den readBefehl auch, um Ihre CSV-Leitung zu trennen.

while IFS=, read -r first second ; do cat <<END_HTML <tr onmouseover="this.style.backgroundColor='#ffff66'" onmouseout="this.style.backgroundColor='#d4e3e5'"> <td>$first</td><td><b>$second</b></td> </tr> END_HTML done 
`echo` liest nicht aus stdin, daher wäre ein Heredoc hier nicht nützlich. Vielleicht wollten Sie stattdessen "Katze" in diesem letzten Ausschnitt verwenden? jwodder vor 5 Jahren 2
D'oh natürlich. Danke für die Korrektur glenn jackman vor 5 Jahren 0
2
Xen2050

Ich glaube, Sie bellen wahrscheinlich den falschen Baum mit Echo an, wahrscheinlich sed oder awk oder perl oder etwas anderes. Dies könnte jedoch eine bessere Lösung sein, aber wenn Sie nur Ihre Echo-Strings verwenden möchten, können Sie den Anführungszeichen und den Dollar-Zeichen, die Sie drucken möchten, entgehen, mögen:

#Added \ \ \ $ echo "\"<tr onmouseover=\"this.style.backgroundColor='#ffff66';\""; "<tr onmouseover="this.style.backgroundColor='#ffff66';"  $ echo "\"onmouseout=\"this.style.backgroundColor='#d4e3e5';>" "onmouseout="this.style.backgroundColor='#d4e3e5';>  $ echo "\"<td>\$</b></td></tr>\";\"" "<td>$</b></td></tr>";" 

man bash Weitere Informationen finden Sie im Abschnitt zum Zitieren, und achten Sie auf Dinge wie:

meta-zeichen
Ein Zeichen, das, wenn es nicht in Anführungszeichen steht, Wörter trennt. Einer der folgenden:

| & ; ( ) < > space tab newline 

Steueroperator
Ein Token, das eine Steuerfunktion ausführt. Es ist eines der folgenden Symbole:

|| & && ; ;; ;& ;;& ( ) | |& <newline> 
Ok, also vergessen wir das Echo. Was schaue ich in was bequemer ist, wie sed, awk oder perl? Aryat Mapreh vor 5 Jahren 0
0
Aryat Mapreh

SO habe ich seit Jahren nicht mehr in shell geschrieben, geschweige denn jahrelang benutzt. Aber ich habe die letztere Lösung ausprobiert, die Sie vorgestellt haben, und wenn, dann: cat prices.csv | sh test2.sh gibt nur leere Felder zurück.

Wenn ich die erste Lösung versuche, erhalte ich Folgendes: ~ $ cat prices.csv | sh test2.sh test2.sh: 4: test2.sh: Syntaxfehler: Umleitung unerwartet

Also nicht sicher, ob ich mit der Lösung # 2 falsch liege und nicht weiß, warum Lösung # 1 das immer noch tut?

Die verwendeten Dateien sind durch Kommas getrennte Textdateien, keine CSV-Dateien. Aryat Mapreh vor 5 Jahren 0