cut Befehl Leerzeichen erkennen

J

joern1

Jungspund
Hallo zusammen,

ich habe eine Textdatei, die verschiedene Felder hat. Ich möchte beispielsweise ein Feld in der Zeile 1 Zeichen 10 - 20 auslesen.

Ich lese die Datei zeilenweise aus und speichere die Zeile in einer Variablen,
die ich nun cutte, jedoch erkennt der cut-Befehl keine Leerzeichen.

Mit awk kann ich auch nicht arbeiten, da ein feld auch Leerzeichen enthalten kann und es keine definierten Trennzeichen gibt.

Gibt es einen Befehl, der Leerzeichen berücksichtigt.

Danke im Voraus

Jörn
 
Hi,

steht eigentlich in der Manpage, du suchst die Option -d fuer cut ('man cut'). Es sei denn ich habe dich missverstanden, in dem Fall muesstest du mal ein konkretes Beispiel geben.

mfg,
bytepool
 
ich denke, -c ist das nutzlicher. mit -c 10-20 wuerden eben zeichen 10-20 ausgegeben, egal ob leerzeichen oder nicht
 
Hier einmal mein Befehl:

datum=`echo $i | cut -c 18-25`

Leider reagiert er bei Zeilen mit mehr Leerzeichen anders, d.h. Leerzeichen werden nicht erkannt.

Option -b BYTE geht irgendwie auch nicht. Ich arbeite mit SOLARIS.

Wie soll mir denn -d helfen, wenn der CUT Befehl ein Problem mit Leerzeichen hat ?
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Beispiel:

0001234 XX XX XX120090530
oder
00012340000XX X X120090530

1234 bekomme ich immer
XX XX XX und dass Datum eben nicht, da hier mehrere Leerzeichen zu finden sind.

| cut -d " " -f 5 funktioniert hier also nicht, da es KEINE def Trennzeichen gibt.
 
Zuletzt bearbeitet:
Hi,

Ich arbeite mit SOLARIS.
Wieso vergessen eigentlich alle so "unwichtige Details" immer?
http://www.unixboard.de/vb3/showpost.php?p=200093&postcount=3
Wenn es keine weiteren Angaben gibt, gehe ich immer von GNU aus. Bei Solaris ist mein Wissen auch direkt erschoepft, denn damit habe ich noch nie gearbeitet.

Wie soll mir denn -d helfen [...]
So wie ich dich jetzt beim zweiten Mal verstanden habe, gar nicht.

[...], wenn der CUT Befehl ein Problem mit Leerzeichen hat?
Das ist deine Interpretation der Dinge. Das wirkliche Problem ist (im Kontext von Hilfestellung), dass du deine Aufgabenstellung nicht sauber definiert hast. Das Problem zu erkennen ist der erste Schritt zur Problemloesung.

Mittlerweile bin ich dahinter gestiegen, dass du sozusagen eine bestimmte Spalte auslesen willst, scheinbar kein richtiges Trennzeichen hast, und es deswegen auf Zeichen Basis mit cut probierst, was nicht funktioniert, weil Leerzeichen auch Zeichen sind. Was mir aber immer noch nichts ueber Input und Output sagt.
Womit wir wieder bei der Frage nach einem konkreten Beispiel waeren, denn ohne eine Beschreibung der Daten ist das hier witzlos.

Edit:
Ah, da kamen ja die Daten zeitgleich mit diesem Post. ;)

Edit2:
Mhh, aber ich kann bei den Daten ueberhaupt keine Struktur erkennen. Wenn es keine feste Struktur gibt, gibt es auch keine Moeglichkeit die Daten sicher aus zu lesen. Aber vermutlich gibt es so eine Struktur in deinem Fall, sonst wuerde man ja kein Datum in den Daten verstecken.
Aber ist das gesuchte immer am Ende der Zeile, oder hast du dort noch Daten weggelassen?

Dann koenntest du z.B. von Hinten anfangen. Oder wenn die Felder immer mit Leerzeichen getrennt sind, koenntest du mit sed die Zeile soweit bearbeiten, dass du schonmal das richtige Feld hast (matching auf ein oder mehr Leerzeichen).

mfg,
bytepool
 
Zuletzt bearbeitet:
Danke für die Antwort, aber es gibt doch eine Struktur:

Zeichen 0 - 15 = Spalte 1
Zeichen 15 - 25 = Spalte 2

deswegen ja auch mein cut Ansatz. In den Spalten können nun beliebig viele LEERZEICHEN stehen.

Ich such einfach eine Möglichkeit Leerzeichen zu erkennen !!
 
Code:
bash-2.03# echo "0001234 XX XX XX120090530" | cut -b1-15
0001234 XX XX X
bash-2.03# echo "0001234 XX XX XX120090530" | cut -b15-25
XX120090530
bash-2.03# uname -a
SunOS db2 5.8 Generic_108528-23 sun4u sparc SUNW,Sun-Fire-480R
 
Hi,

grade auf ner Solarisbüchse met ner Bash ausprobiert
Code:
bash-3.00# gaga="0001234 XX XX XX120090530"
bash-3.00# echo ${gaga:17}
20090530
bash-3.00#
habe aber keine Ahnung welche shell du nutzt :)

mfg
HeadCrash
 
Er hats einfach blöd beschrieben. Wahrscheinlich muss er einfach vorher die Leerzeichen mit sed wegsubstituieren und dann ab Stelle 15-20 extrahieren oder so..
 
Moin,

danke. Es geht :)

und zwar so: datum=`echo ${i:21} | cut -c 0-8`

so ist es falsch: datum=`echo $i | cut -c 12-21`

herzlichen Dank an alle Beteiligten....:D
 
Ach ups hab was vergessen, mit echo ${i:0:8} gibste gleich nur die ersten 9 Zeichen aus.
Bzw in deinem fall echo ${i:21:8} plus/minus eins ;)
 

Ähnliche Themen

cut Befehl im awk Befehl!?

Zurück
Oben