String suchen und ab dort auslesen

J

Jan S.

Grünschnabel
Hallo zusammen! Ich arbeite mit bash.

Ich habe in etwas folgende Datei vorliegen:

Header (hier stehen ein paar Zeilen nutzlose Daten)


Scan #1,-247.64,-811.97,822.89,239.82
Scan #2,-247.64,-811.97,822.89,239.82
Scan #3,-247.64,-811.97,822.89,239.82
Scan #4,-247.64,-811.97,822.89,239.82

Es gibt immer eine unterscheidliche Anzahl an "Scans". Ich möchte nun alle Daten hinter "Scan #Number," zeilenweise auslesen und in eine andere Datei schreiben.

Mit welchem Befehl kann ich das umsetzen? Vielen Dank schonmal!
 
Code:
sed -n '/^Scan #[0-9]\+/{ s!^Scan #[0-9]\+,\(.\+\)!\1!; p }'
"-n" sorgt dafür, dass sed den patternspace nicht ausgibt (wie es default behaviour wäre).
Dann wird für jede Zeile, auf die die Regex /^Scan #[0-9]*/ matcht der code in den curly braces ausgeführt.
s!regex!foo! substituiert regex durch foo im patternspace und "p" (für print) gibt den patternspace dann aus.
(geklammerte Ausdrücke in einer Regex können mit \<nummer des ausdrucks> referenziert werden. Also steht \1 für den Inhalt der ersten Klammer)

edit: wenn du gnu sed hast, kann man das ganze leicht verschönern:
Code:
sed -rn '/^Scan #[0-9]+/{ s!^Scan #[0-9]+,(.+)!\1!; p }'
Imho etwas klarer.
 
Zuletzt bearbeitet:
Hallo Gott_in_schwarz!!

Vielen Dank! Das is ja wesentlich einfach als ich es mir dachte... Ich habe fogeldnes draus gebastelt...ganz einfaches Skript.... Tolles Forum!!!

holedaten()
{
cd messung

ls -1 *.csv > liste

while read line
do

sed -n '/^Scan #[0-9]\+/{ s!^Scan #[0-9]\+,\(.\+\)!\1!; p }' $line > mod_$line

mkdir quelle
cp $line quelle/

done < liste

rm -f liste

cd ..
}
 
Hallo zusammen,
ich bin's nochmal ;-)

Gibt es auch die Möglichkeit direkt im sed-Befehl die Daten nur bis zum 5ten Wert rauszuholen?
Sprich bei folgender Zeile:
Scan #1,-247.64,-811.97,822.89,239.82,489.37,785.22

sollte das hier rauskommen:

-247.64;-811.97;822.89;239.82

Vielen Dank!
 
Wenn es nicht unbedingt sed sein muss, kannst du das ganz leicht mit awk erledigen:
Code:
awk -F "," '{ printf("%s,%s,%s", $2,$3,$5) }'
 

Ähnliche Themen

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Zeile für Zeile auslesen und Befehl ausführen

Prblem mit zeilenweises auslesen von Datei und schreiben nach mysql

3 letzte Zeile löschen oder ab Zeile 55 Muster suchen und löschen

Letzten Tag löschen

Zurück
Oben