cut Befehl Leerzeichen erkennen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von joern1, 25.11.2009.

  1. joern1

    joern1 Jungspund

    Dabei seit:
    25.11.2009
    Beiträge:
    12
    Zustimmungen:
    0
    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
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 25.11.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    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
     
  4. Rvg

    Rvg Doppel-As

    Dabei seit:
    11.07.2004
    Beiträge:
    141
    Zustimmungen:
    0
    ich denke, -c ist das nutzlicher. mit -c 10-20 wuerden eben zeichen 10-20 ausgegeben, egal ob leerzeichen oder nicht
     
  5. #4 joern1, 26.11.2009
    Zuletzt bearbeitet: 26.11.2009
    joern1

    joern1 Jungspund

    Dabei seit:
    25.11.2009
    Beiträge:
    12
    Zustimmungen:
    0
    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.
     
  6. #5 bytepool, 26.11.2009
    Zuletzt bearbeitet: 26.11.2009
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,

    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.

    So wie ich dich jetzt beim zweiten Mal verstanden habe, gar nicht.

    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
     
  7. joern1

    joern1 Jungspund

    Dabei seit:
    25.11.2009
    Beiträge:
    12
    Zustimmungen:
    0
    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 !!
     
  8. marce

    marce Kaiser

    Dabei seit:
    01.08.2007
    Beiträge:
    1.053
    Zustimmungen:
    8
    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
    
     
  9. #8 HeadCrash, 26.11.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    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
     
  10. #9 saeckereier, 26.11.2009
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    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..
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. joern1

    joern1 Jungspund

    Dabei seit:
    25.11.2009
    Beiträge:
    12
    Zustimmungen:
    0
    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
     
  13. #11 HeadCrash, 26.11.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    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 ;)
     
Thema: cut Befehl Leerzeichen erkennen
Besucher kamen mit folgenden Suchen
  1. linux cut nach leerzeichen

    ,
  2. unix cut von hinten

Die Seite wird geladen...

cut Befehl Leerzeichen erkennen - Ähnliche Themen

  1. Centosbefehle

    Centosbefehle: Hallo ich habe ein Centos 7.2.15.11 image (mit Hdclone von Miray gemacht) Ich möchte das Image auf eine existierende Ubuntu installation...
  2. Kurzzusammenfassung der Befehle und Progr. für die shell

    Kurzzusammenfassung der Befehle und Progr. für die shell: Hallo zusammen, bei der Verbesserung eines meiner Scripte bin ich nach ausführlicher Recherche auf den Befehl (Prog?) "file" gestossen. Dieser...
  3. Befehlssequenz

    Befehlssequenz: Hallo zusammen, Ich bin ein Anfänger der Unix-Sprache und versuche gerade eine Befehlssequenz zusammen zu schustern, welche mir alle laufenden...
  4. Befehl beim Session beenden

    Befehl beim Session beenden: Hallo allerseits, ich habe vor ein Verzeichnis auf meinem Webserver zu verschlüsseln. Ich will, sobald ich darauf zugreifen muss/will eine...
  5. Zeile für Zeile auslesen und Befehl ausführen

    Zeile für Zeile auslesen und Befehl ausführen: Hallo Zusammen Ich habe folgendes Problem: Ich möchte eine Datei zeilenweise auslesen und jede Zeile als Pattern für grep verwenden. Die...