instinctless
Goto Top

Spezifische Zeilen aus Textdatei entfernen

Hallo Community, ich benötige eure Hilfe.
Ich habe eine Textdatei die so aufgebaut ist
E5      228346       NCF2_rs2274064  UNKNOWN 0.12126
E6
E7      227922       ATP13A4_rs6788448       UNKNOWN

Es gibt also am Zeilenanfang einen Bezeichner A1 - Z99.
Wie oben zu sehen gibt es aber auch Zeilen wo nur der Bezeichner vorhanden ist (E6), dahinter aber keine Daten stehen.
Wie bekomme ich es hin, dass genau jene Zeilen aus der Datei entfernt werden?

Content-ID: 2811012095

Url: https://administrator.de/contentid/2811012095

Printed on: December 13, 2024 at 12:12 o'clock

TK1987
TK1987 May 17, 2022 at 10:20:29 (UTC)
Goto Top
Moin,

mit Powershell und ein bisschen Regex ein Kinderspiel:
(Get-Content "C:\Pfad\zur\Datei.txt") -NotMatch "^[A-Z]\d{1,2}$" | Set-Content "C:\Pfad\zur\Output.txt"  

Powershell Leitfaden für Anfänger
Regex Tutorial

Gruß Thomas
colinardo
Solution colinardo May 17, 2022 updated at 10:23:40 (UTC)
Goto Top
Servus.
Da das hier in der Kategorie Linux gepostet wurde gehe ich mal von bash/sh aus (auch wenn Powershell unter Linux natürlich auch funktioniert Thomas aber eben nicht out of the box face-smile)
grep -Ev '^[A-Z][0-9]{1,2}\s*$' test.txt >datei_neu.txt  
Grüße Uwe
TK1987
TK1987 May 17, 2022 updated at 10:29:49 (UTC)
Goto Top
Moin Uwe,

Zitat von @colinardo:
Da das hier in der Kategorie Linux gepostet wurde gehe ich mal von bash/sh aus
Stimmt, hab ich glatt übersehen (im Ticker stehen leider die Tags nicht mit dabei).

Gruß Thomas
instinctless
instinctless May 17, 2022 updated at 11:08:38 (UTC)
Goto Top
Ganz hervorragend.
Ich bin noch nicht so der Regex Spezi.
Kannst du mir vllt noch erklären, was
\s*$'   
macht?
$ steht ja für "bis zum Ende"
beim \s* spekuliere ich auf, hau alles weg bis $.
Ist das korrekt?
TK1987
TK1987 May 17, 2022 updated at 11:20:24 (UTC)
Goto Top
Moin,

\s beinhaltet Leerzeichen, Tabs, Zeilenümbrüche und Carriage Returns
* ist eine Mengenangabe und bedeutet 0 oder mehr (bis es nicht mehr zutrifft).

Mit anderen Worten, wenn hinter der gesuchten Zeichenkette nur noch Leerzeichen oder ähnliches folgen, wird die Zeile auch ausgelassen.

Gruß Thomas
colinardo
colinardo May 17, 2022 updated at 12:37:42 (UTC)
Goto Top
\s* = Von mir gerne "Spacemonkey" genannt face-smile. Habe ich mir hier im Forum angewöhnt da es hier immer wieder mal Kandidaten gibt die Ihre Logs mit Batch schreiben und da dann am Ende unwissend Spaces in die Zeilen echo'n.
TK1987
TK1987 May 17, 2022 at 12:54:29 (UTC)
Goto Top
Zitat von @colinardo:
\s* = Von mir gerne "Spacemonkey" genannt face-smile. Habe ich mir hier im Forum angewöhnt da es hier immer wieder mal Kandidaten gibt die Ihre Logs mit Batch schreiben und da dann am Ende unwissend Spaces in die Zeilen echo'n.
Je nachdem, welches Programm man verwendet (oder mit welchen Parameter), muss man damit allerdings vorsichtig sein.
Ich bin damit z.B. bei Notepad++ schon ein paar mal auf die Nase gefallen, bei "\s*$" sind dann nämlich die Zeilenumbrüche mit futsch 😉

grep und sed verabeiten die Daten Zeilenweise, solange man den Parameter -z nicht angibt, daher geht das hier natürlich. Andernfalls müsste man sonst etwa "[ \t]*" verwenden, um nur Leerzeichen und Tabs zu berücksichtigen.

Gruß Thomas
colinardo
colinardo May 17, 2022 updated at 13:01:12 (UTC)
Goto Top
Jepp, Regex nimmt einem wie üblich auch je nach Engine jede Kleinigkeit übel also immer schön die Flags beachten. Deswegen "Affe" der springt auch mal gerne wenn man ihn lässt face-wink.