2017-08-07 2 views
1

eg. Ich habe einen test.sqlgnu parallel pipe sed entfernen backtick symbol

cat test.sql 
INSERT INTO `t_zydx` VALUES 77.2148, 

und ich will `ersetzen

von leeren sed mit, es funktioniert

sed s/\`//g test.sql 
INSERT INTO t_zydx VALUES 77.2148, 

aber wenn ich parallel Rohr mit

cat test.sql | parallel --pipe sed s/\`//g 

Es zeigt

/bin/bash: -c: line 0: unexpected EOF while looking for matching ``' 
/bin/bash: -c: line 1: syntax error: unexpected end of file 
+1

Was möchten Sie tun? Neben einem Syntaxfehler sehe ich nicht das Problem, das Sie lösen möchten – hek2mgl

+0

Ich versuche, das 'backtick' Symbol zu entfernen, indem ich' parallel - pipe sed' benutze, aber es funktioniert nicht –

+0

Warum möchten Sie parallel verwenden dafür? – hek2mgl

Antwort

2

Sie müssen den Befehl zitieren:

cat test.sql | parallel -q --pipe sed s/\`//g 

oder:

cat test.sql | parallel --pipe sed 's/\`//g' 

zum Beispiel, wenn ich eine SQL-Datei wie 20GB haben, tut parallel Prozess schneller als nur sed mit ?

Wahrscheinlich nicht. --pipe ist langsam. Es erreicht maximal 500 MB/s. Aber --pipepart maxes out bei etwa 1 GB/s pro Kern. Also auf einem 4-Core mit Hyperthreading (8 "Cores") kann ich 5 GB/s bekommen.

Dadurch wird die Größe der test.sql durch die Anzahl der Kerne unterteilen, und übergeben volle Linie chunks dieser Größe zu sed:

parallel --pipepart --block -1 -a test.sql sed 's/\`//g' 

GNU Parallel wird ausgegeben auf der Platte puffern, so dass diese nun die Begrenzung sein kann Faktor. Dies ist mehr oder weniger, was passiert:

read test.sql 
save processed output to /tmp 
read processed output from /tmp 
print to stdout 

Wenn Sie nicht über die Reihenfolge ist egal - Sie vollen Linien nur wollen, dann können Sie die beiden mittleren save und read unter Verwendung --line-buffer vermeiden (ab Version 20170822):

So vermeiden Sie die temporäre Speicherung der 20 GB, aber lesen Sie nur 20 GB von der Festplatte einmal und schreiben Sie 20 GB auf Standardausgabe.

+0

Danke, das funktioniert sehr gut! –