2016-11-23 3 views
-1

In der Datei fic.txt mit Leerzeichen getrennt, wenn der letzte Wert '' ist, dann setzen Sie '0'.awk: Setzen Sie den Spaltenwert nur auf '0', wenn der Wert NULL

Beispiel:

'A' 'B' 'C' '' 'E' '' | 
'X' 'O' 'Y' 'T' 'W' '1' | 

zu

'A' 'B' 'C' '' 'E' '0' | 
'X' 'O' 'Y' 'T' 'W' '1' | 

Ich habe versucht:

awk '$6="\x27"0"\x27"' fic.txt -> Für alle Werte der 6. Spalte auf '0' gesetzt. Es klappt.

Aber Problem immer auf '0' NUR wenn 6. Spalte ist ''.

Danke für Ihre Hilfe.

+0

_if dem letzten Wert ist '' _ - was ist das '| 'Im wirklich letzten Feld? –

Antwort

3
awk '$6=="\047\047" { $6="\047"0"\047"} 1' fic.txt 

Ich schlage vor, awk Führer wie this oder this zu lesen, um awk zu lernen.

aktualisiert: Danke @Kent und @EdMorton für Ihre Anmerkungen.

+1

können Sie var: '-v q =" '"' deklarieren und dann 'q' in Codes verwenden. – Kent

+1

Verwenden Sie immer Oktal-Escape-Sequenzen, nie hex. Siehe http://awk.freeshell.org/PrintASingleQuote. –

0
sed "s/'' |/'0' |/" fil 
'A' 'B' 'C' '' 'E' '0' | 
'X' 'O' 'Y' 'T' 'W' '1' | 

Basierend auf der Struktur der Datei, werden alle Zeilen mit dem Rohr „|“ enden. Einfaches sed Suchen und Ersetzen würde die Aufgabe erledigen. Verwenden Sie zum direkten Ändern der Eingabedatei -i oder -i.bak Flag mit sed.

0

Mit sub in awk ersetzen '' ('\47 in Oktal ist) in "der letzten Spalte" ($6) mit '0':

$ awk '{sub(/\47\47/, "\47" "0" "\47", $6)} 1' bar 
'A' 'B' 'C' '' 'E' '0' | 
'X' 'O' 'Y' 'T' 'W' '1' | 
Verwandte Themen