2016-03-25 13 views
2

Ich habe ein paar andere Fragen dazu gelesen, aber keine von ihnen scheint zu funktionieren. Ich versuche gerade, etwas wie Datei A.txt mit dem Trennzeichen "STOPHERE" zu teilen.Verwenden Sie awk, um Textdatei in mehrere Dateien zu trennen

Dies ist der Code:

#!/bin/bash 

awk 'BEGIN{ 
    RS = "STOPHERE" 
    file = 0} 
{ 
    file++ 
    print $0 > ("sepf" file) 
}' A.txt 

Datei A:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  lwdjnuqqfqaaaaaaaaaa qlknfqek fkgnl  efekfnwegelflfne 
ldnwefne f STOPHEREsdfnkjnf nnnnnnnnnnnnnnnnnnnnnnnasd fefffffffffffffflllo 

aldn3orn STOPHERE 

fknjke bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbowqff STOPHERE i 
asfjfenf STOPHERE 

In diese:

sepf1:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa  lwdjnuqqfqaaaaaaaaaa qlknfqek fkgnl  efekfnwegelflfne 
ldnwefne f 

sepf2:

sdfnkjnf nnnnnnnnnnnnnnnnnnnnnnnasd fefffffffffffffflllo 

aldn3orn 

sepf3:

#line starts here 
fknjke bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbowqff 

sepf4:

i 
asfjfenf 

Also im Grunde die Formatierung genau zwischen dem STOPHERE der gleich bleiben.

Aber aus irgendeinem Grund, dies ist die Art der Ausgabe in einigen der Dateien, die ich bin immer:

ZB:

TOPHEREsdfnkjnf nnnnnnnnnnnnnnnnnnnnnnnasd fefffffffffffffflllo 

aldn3orn 

Irgendwelche Ideen, warum die „Tophere“ bleibt sepf2? ?

+0

Das sagt nur das erste Zeichen als Trennzeichen http://www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_19.html Aufzeichnung verwendet wird – Bob

+0

Gibt es irgendeine Weise, die ich ändern kann, so dass es das ganze Wort benutzt? – Neamah

+1

Probieren Sie Nawk oder Gawk abhängig von Ihrem Betriebssystem. Sie erlauben eine Regex. – Bob

Antwort

0

Mit GNU awk kann RS ein Regex sein. Sie können also mehrere Zeichen als Datensatztrennzeichen angeben. Ihr Code kann auch vereinfacht werden, da AWK einen Standardwert von 0 zur Verfügung stellt. Das erzeugt also separate Dateien für jeden Datensatz.

awk -v RS="STOPHERE" '{print $0 > ("sepf" ++file)}' 
Verwandte Themen