2017-08-03 1 views
0

Mein Ziel ist es, die Ausgabe von einem awk Druckbefehl (unter Beibehaltung der Formatierung) zu nehmen und damit bestimmten Text in einer Datei zu ersetzen.
Aktuell im mit:awk Druckausgabe als Variable/Array bleibt nicht formatiert

declare -a mach=($(awk -F',' 'NR>1{print NR-1, $8}' mag_grad.csv)) 

die gibt:

1 0.77492 
2 0.18022 
3 0.29596 
4 0.5229 

etc ...

Ich versuche, sed zu verwenden, um Text in einer Datei mit dem Array $ zu finden und ersetzen Mach, mit der gleichen Formatierung von 2 Spalten.

sed -i s/"mach data"/"${mach[*]}"/g nodedata.txt 

jedoch das Ergebnis davon ist, zu ersetzen, mach Daten mit

1 0.77492 2 0.18022 3 0.29596 4 0.5229 ....... 

Alle Ideen, wie ich die Formatierung erhalten könnte?

Prost

+1

Was ist es, dass Sie versuchen, zu tun? Möchten Sie die Zeilenumbrüche in der Ausgabe beibehalten? Wenn ja, warum verwenden Sie ein Array, das alles aufteilt und alle Leerzeichen entfernt? –

+0

Ich bin sehr neu in jeder Art von Skripting, also entschuldige ich mich, wenn ich Dinge falsch verwende. ja Ich möchte die neuen Zeilen in der Ausgabe beibehalten, dachte, ich musste es als ein Array anstelle einer Variablen festlegen. Jedoch, wenn ich versuche und sed mit Mach als eine Variable nicht Array verwenden es nicht das Wort mit den richtigen Daten ersetzt, nur das Wort "Mach" –

Antwort

1

try:

mach=$(awk -F',' 'NR>1{print NR-1, $8}' mag_grad.csv) 
sed -i "s/\x22mach data\x22/${mach//$'\n'/\\n}/" nodedata.txt 
+0

versuchte dies und es ersetzt nur "mach Daten", mit dem Wort Mach, nicht die Variable mach unfortunatley –

+0

Ich würde Perl dafür verwenden: keine Probleme mit Zeilenumbrüchen im Ersetzungstext: 'perl -i-pse 's/mach data/$ data/g' - -data =" $ mach "filename' –