Ersetzen Sie ein Wort oder eine Zahl in einem Satz, der weniger als 8 Wörter enthält, mit awk oder sed

Ersetzen Sie ein Wort oder eine Zahl in einem Satz, der weniger als 8 Wörter enthält, mit awk oder sed

Ich habe unten ein Beispiel, wo ich den Wert in Spalte 9 ersetzen muss, wenn er kleiner als 8 ist, andernfalls beenden oder mithilfe der sed- oder awk-Funktion ignorieren:

) in datadbs extent size 16 next size 4 lock mode row;

Wenn ich die folgende awk-Funktion verwende, wird in Spalte 9 nur der benötigte Wert gedruckt, ich möchte aber dennoch die Satzstruktur beibehalten.

echo ") in datadbs extent size 16 next size 4 lock mode row;" | 
 awk '{if ($9 < 8 ) print 8;}'

AUSGABE:

8

Was ich möchte, ist Folgendes:

) in datadbs extent size 16 next size 8 lock mode row;

Antwort1

Ohne irgendwelche Kenntnisse awkwürde ich vorschlagen, den Parameter zu ändern und alles auszudrucken:

echo ") in datadbs extent size 16 next size 4 lock mode row;" | 
  awk '{if ($9 < 8 ) $9 = 8; print;}'

Antwort2

sed -e 's/\S\+/&\n/9; s/ [0-7]\n/ 8/'

Antwort3

sedAlternative:

s=") in datadbs extent size 16 next size 4 lock mode row;"
echo $s | sed 's/size [0-7] lock/size 8 lock/'

verwandte Informationen