2016-08-23 1 views
0

Ich versuche, einen Parameter zu ersetzen, um einen Wert zu ändern, wenn das AWK nach einer Zeichenfolge in einer Datei sucht.So senden Sie Parameter in AWK, um einen Parameter zu ersetzen. Unix Korn Shell

ist das möglich? Ich mache das.

DisplayMessage() 
{ 
    ##Parameter 1 = Message ID. 
    MessageFile="/dev/fs/C/Users/salasfri/Desktop/Messages.txt" 
    Message=$(awk '$1 ~ /^'$MessageID'$/ {$1=""; print $0}' $MessageFile) 
} 

die Nachrichtendatei in der Datei für aussieht "nachrichten": "Die Datei $ {1} wurde nicht tranmitted"

0005    The file ${1} was not tranmitted. 

es für 0005 suchen und die Meldung

Ich möchte $ {1} mit dem Namen der Datei

ersetzen diese mit awk möglich sein könnte? irgendeine Idee?

+0

Wofür steht 'der Name der Datei'? Die 'MessageFile'? Irgendein anderer Dateiname? Welche Variable enthält den Namen der Datei? – Jdamian

+0

Um einen Teilstring in einem String zu ersetzen, sollten Sie 'sub()' oder 'gsub()' Funktionen verwenden: 'sub (" $ \ {1 \} "," mein Dateiname ", $ 0)'. Bedenken Sie, dass '{1}' eine besondere Bedeutung als E.R.E hat. und daher muss ein Escape-Zeichen verwendet werden. – Jdamian

Antwort

1

dies tun sollten ...

awk '$1~/^'$MessageID'$/ {$1=""; sub("\\${1}",FILENAME); print}' 

aber vielleicht möchten Sie

awk -v mid="${MessageID}" '$1==mid {$1=""; sub("\\${1}",FILENAME); print}' 

ändern, da Sie für eine exakte Übereinstimmung, nicht Muster Spiel suchen. Auch besser awk Variablen anstelle von Zitat Tanz verwenden.

Verwandte Themen