RaketenX: Eine Lösung dieses Spaßrätsels...

Beitrag lesen

Was für ein Spaßrätsel. Dann räumen wir mal mit der sehr verwirrend formulierten Aufgabe auf und ergänzen das Zeug...

Wir haben also eine Input-Datei, von der willkürlich (und semantisch grob-falsch!) die erste und dritte Zeile in einer HTML-Tabelle ausgegeben werden soll. Das ist ziemlich merkwürdig und ich bin etwas „gnaaaazig“, weil @ThomasR auf meine Rückfrage nicht reagiert - aber es sei so...

Ich entwerfe eine Input-Datei namens "daten.txt":

Erster Satz.
Zweiter Satz.
Dritter Satz.
Vierter Satz.
Fünfter Satz.
Sechster Satz.
Siebenter Satz.

Da Tabulatoren in der HTML-Ausgabe keine andere Bedeutung haben und von uns selbst als Trenner gebraucht werden ersetzen wir diese durch Leerzeichen:

~> tr "\t" " " < daten.txt

Um feststellen zu können, welches denn die erste und dritte Zeile sei, nummerieren wir die einfach mal so durch, dass die Zeilennnummer am Anfang steht. Das dann so, dass leere Zeilen gar nicht erst nummeriert werden:

~> tr "\t" " " < daten.txt | nl -b t -n ln 
1     	Erster Satz.
2     	Zweiter Satz.
3     	Dritter Satz.
4     	Vierter Satz.
5     	Fünfter Satz.
6     	Sechster Satz.
7     	Siebenter Satz.

Das sieht gut aus. Also filtern wir mit grep nach der ersten und dritten Zeile

~> tr "\t" " " < daten.txt | nl -b t -n ln  | grep -E '^1 |^3 '
1     	Erster Satz.
3     	Dritter Satz.

und geben also wie folgt aus: erste Spalte mit den Nummern, dann ein Tabulator (mehrere Leerzeichen werden so auch erkannt), dann zweite Spalte mit dem eigentlichen Inhalt. Damit lässt sich dann im AWK schon mal arbeiten.

Wir notieren als Datei "daten.awk":

BEGIN {
  FS="\t"; 
	print "<table>";
}


{
    print "    <tr>";
    print "        <td>Zeile: "$1*1"</td>";
    print "        <td>"$2"</td>";
    print "    </tr>";	
}

END {
	print "</table>";
}

und probieren das mal aus:

~> tr "\t" " " < daten.txt | nl -b t -n ln  | grep -E '^1 |^3 ' | awk -f daten.awk 
<table>
    <tr>
        <td>Zeile: 1</td>
        <td>Erster Satz.</td>
    </tr>
    <tr>
        <td>Zeile: 3</td>
        <td>Dritter Satz.</td>
    </tr>
</table>

Das sieht Deiner Anfprdrung schon mal sehr ähnlich. Die Formatierungen im asbach-alten HTML 2.0 kannst Du gerne selbst ergänzen. Aber mit

~> tr "\t" " " < daten.txt | nl -b t -n ln  | grep -E '^1 |^3 ' | sort -k1 -n -r | awk -f daten.awk
<table>
    <tr>
        <td>Zeile: 3</td>
        <td>Dritter Satz.</td>
    </tr>
    <tr>
        <td>Zeile: 1</td>
        <td>Erster Satz.</td>
    </tr>
</table>

kann man die Ausgaben gerne auch umgedreht erhalten - nur falls sich irgendjemand fragt, warum ich denn wohl bittschön einen Blick auf sort empfohlen habe…