Forum: PC-Programmierung Linux Datei aufteilen je nach Anzahl von bestimmten Character


von PapaSchlumpf (Gast)


Lesenswert?

hallo

ich möchte ein text file in mehrere Einzel Dateien aufteilen, je nachdem 
wieviele Doppelpunkte in einer Zeile sind. Also 4 DP soll nach 4.txt 
kopiert werden, 5 DP nach 5.txt usw

ich hab mich mit meinem 0,2% awk Verständnis mal dran versucht und 
natürlich kläglich gescheitert:

gawk '{n=awk -F ':' in.txt); print >> n".txt"}' in.txt > out.txt

von Günter Lenz (Gast)


Lesenswert?

Nimm Python, damit wird das warscheinlich einfacher gehen.

von Tom (Gast)


Lesenswert?

Die dümmstmögliche Art in bash ist ziemlich langsam:
1
cat in.txt | while read s; do n=$(echo "$s" | grep -o ":" | wc -l); echo $s >> $n.txt; done;

Ein langer Text 
(https://raw.githubusercontent.com/mxw/grmr/master/src/finaltests/bible.txt, 
100k Zeilen) nach Anzahl der 'e' statt ':' sortiert hat damit 4.5 
Minuten benötigt.

von Tom (Gast)


Lesenswert?

Böse Falle: echo $s verschluckt mehrfache Leerzeichen, echo "$s" nicht.

von Andreas M. (amesser)


Lesenswert?

1
gawk -F ':' -- '{print >> NF".txt"}' < in.txt

von 04WD (Gast)


Lesenswert?

Andreas M. schrieb:
>
1
> gawk -F ':' -- '{print >> NF".txt"}' < in.txt
2
>

Nice, muss man auch erst drauf kommen.
--> 0 1 2 3 4 7 .txt


irgend was ist immer ;)
1
awk -F ':' -- '( NF > 1 )   {print >> NF-1".txt"}' < text.txt


-->  1 2 3 6 .txt



text.txt
1
:
2
3
:klklk
4
ouoiuoi
5
k;k;lk;l
6
7
::kjkjljlkjlkj
8
hjhkhkjh::
9
jkjkjkkj:::
10
11
:::
12
:::
13
:::
14
15
::::::

von 04WD (Gast)


Lesenswert?

Nee, so einfach kommt man nicht davon. Mehrfaches vorkommen innerhalb 
einer Zeile ist auch noch zu berücksichtigen....
erstmal idF

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.