staging.inyokaproject.org

Für diese Funktion musst du eingeloggt sein.

Abschnitte aus einer Datei auf mehrere Dateien verteilen

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

fireworker72

(Themenstarter)

Anmeldungsdatum:
11. März 2017

Beiträge: 64

Danke funktioniert!!!!!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

track schrieb:

Nee, die Trennung, dass er die Datei bei der Schlüsselzeile mit dem "accountName" echt neu schreibt, habe ich bewusst so gelassen.
Denn sonst würde er bei jedem neuen Versuch die Daten an die schon vorhandenen Dateien anhängen (und nicht neu beginnen).

Das funktioniert in meiner Lösung genau so. Du brauchst den >> nicht, weil awk anders arbeitet als die Shell.

Dann hättest Du womöglich am Ende den Datenblock 5x in der Datei stehen ... 😉

Nee:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ cat x
cat: x: No such file or directory
$ seq 1 5 | awk '/^2/ {print >"x"} {print "a" $0>"x"}'
$ cat x
a1
2
a2
a3
a4
a5
$ seq 1 5 | awk '/^2/ {print >"x"} {print "a" $0>"x"}'
$ cat x
a1
2
a2
a3
a4
a5

Wie Du siehst, macht awk die Datei nur ein Mal auf. Erst, wenn man an allen Stellen >> nutzt, wird angehängt (Fortsetzung der Session oben):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ seq 1 5 | awk '/^2/ {print >>"x"} {print "a" $0>>"x"}'
$ cat x
a1
2
a2
a3
a4
a5
a1
2
a2
a3
a4
a5

Insbesondere entscheidet der zuerst ausgeführte Code, ob angehängt wird oder nicht:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
$ rm x
$ cat x
cat: x: No such file or directory
$ seq 1 5 | awk '/^2/ {print "a" $0>"x"} {print "b" $0>>"x"}'
$ cat x
b1
a2
b2
b3
b4
b5
$ seq 1 5 | awk '/^2/ {print "c" $0>"x"} {print "d" $0>>"x"}'
$ cat x
b1
a2
b2
b3
b4
b5
d1
c2
d2
d3
d4
d5
$ seq 1 5 | awk '/^2/ {print "c" $0>>"x"} {print "d" $0>"x"}'
$ cat x
d1
c2
d2
d3
d4
d5
Antworten |