2016-05-04 5 views
2

In bash, verwende ich den grep Befehl das Ergebnis in eine Datei zu drucken:In Bash, grep für eine Linie und Druck, die in einer Datei Zeile, aber mit mehr Informationen

grep "4 CA 1" CVOLOPTs*SYMREMO.out | grep "11 O 0 0 0" >> data.dat 

, das die folgenden druckt in die data.dat Datei:

4 CA 1  2.3311  4.4052 11 O 0 0 0 

würde Ich mag die data.dat aussehen wie die folgende machen:

252 4 CA 1  2.3311  4.4052 11 O 0 0 0 

Ich habe versucht, so etwas wie:

grep "4 CA 1" CVOLOPTs*SYMREMO.out | grep "11 O 0 0 0" >> echo "252" data.dat 

aber nicht funktioniert.

Ich würde mich freuen, wenn Sie mir bitte helfen könnten.

Antwort

3

Ein zusätzliches Rohr mit awk könnte den Trick:

awk ´/4 CA 1/ && /11 O 0 0 0/ {print "252",$0}' CVOLOPTs*SYMREMO.out >> data.dat 

$0 ist die gesamte aktuelle Zeile:

grep "4 CA 1" CVOLOPTs*SYMREMO.out | grep "11 O 0 0 0" | awk ´{print "252",$0}´ >> data.dat 

das Ganze mit einer einzigen awk erfolgen. In diesem Fall die von der 2 Regex ausgewählte Zeile.

awk liest jede Zeile nacheinander.

Regex steht für regulären Ausdruck. Mit awk sind sie in / eingeschlossen: z.B. /4 CA 1/

/4 CA 1/ && /11 O 0 0 0/ ist ein Ausdruck: es wahr ist, wenn die Leitung übereinstimmt gelesen wird, sowohl die erste regex and (&&), um die zweiten regulären Ausdruck. In dieser Situation gibt es nur Strings; siehe 9. Regular Expressions von der Open Group Basisspezifikationen Ausgabe 6.

+0

Vielen Dank! Aber es muss stattdessen im ersten Befehl "{print" 252 ", $ 0}" sein. Und der zweite Befehl sollte statt dessen (glaube ich) "/ 4 CA 1/&&/11 O 0 0 0/{print" 252 ", $ 0}" sein. Aber vielen Dank! :) –

+0

OK, danke. Ich kopiere einfach die Strings-Optionen von 'Grep's. –

+0

Wofür steht '$ 0 $'? –

1

Sie müssen möglicherweise nicht grep verwenden, wie Sie die gewünschte Ausgabe mit diesem awk Einzeiler erreichen könnte:

awk '/4 CA 1/ && /11 O 0 0 0/{printf "252\t%s\n",$0}' CVOLOPTs*SYMREMO.out >> data.dat 

Ich habe eine Registerkarte setzen nach 252, die zu einem oder mehreren Leerzeichen wechseln könnte

+0

Vielen Dank! :) (Ich fürchte, das funktioniert so, dass ich Ihnen keine +1 geben kann, da ich weniger als 15 Reputation habe ...) –

+0

Ich kann diese Antwort jetzt als nützlich markieren :) –