Re: sort Frage

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Thu, 16 Aug 2007 12:20:13 +0200 (CEST)

Manfred Lotz wrote:
> ich möchte eine Datei sortieren, die aber keine Felder hat, die durch
> irgendeinen Separator getrennt sind. Genau genommen möchte ich
> sortieren nach z.B. ab der 36. Spalte genau 8 Zeichen lang.
>
> Ich habe sort -t '' -k 38.8 probiert, aber dies funktionierte nicht.

Wenn der Inhalt der Zeilen nicht bekannt ist und daher
theoretisch jedes beliebige Zeichen vorkommen kann, gibt
es nur eine (portable) Möglichkeit, mit sort(1) zeichen-
weise zu sortieren: Man muss ein Newline als Spalten-
trenner angeben, um zu erzwingen, dass die ganze Zeile
als eine Spalte angesehen wird:

$ sort -t "^J" -k 1.36,1.43

Das »^J« darf man nicht wörtlich eingeben (also _nicht_
Dach-J, ebensowenig »\n«), sondern man muß ein echtes
Newline angeben. Bei den meisten Shells kann man das
interaktiv (am Prompt) eingeben, indem man Ctrl-V Ctrl-J
eintippt (je nach Shell wird dann »^J« oder »^M« oder
ein echter Zeilenumbruch angezeigt).

In einem Shellskript kann man an der Stelle einfach einen
ganz normalen Zeilenumbruch eingeben:

    sort -t "
    " -k 1.36,1.43

Und weil das nicht so schön aussieht, kann man sich auch
vorher ein Newline in eine Variable packen und die dann
(evtl. mehrmals) benutzen:

    NL="
    "

    sort -t "$NL" -k 1.36,1.43

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
"C++ is the only current language making COBOL look good."
        -- Bertrand Meyer
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 16 Aug 2007 - 12:21:36 CEST

search this site