2017-04-21 4 views
0

Ich habe Daten in Textdateien treffen, die etwa wie folgt aussieht:Zahl und mit awk ersetzen, während Zeilen kopieren, die Kriterien

* * 
18.442 24.661 32.45 53.061 62.039 100.303 113.257 123.638 131.444 142.779 149.064 
* * 
* * 
* * 
27.788 49.938 132.166 139.538 
* * 
12.224 19.48 29.61 36.646 57.56 107.559 114.111 122.871 135.943 145.89 
* * 
14.162 21.568 28.105 34.322 42.914 52.978 100.12 106.172 112.79 
* * 
* * 

Ich möchte awk verwenden, um die Anzahl der Einträge in jeder Zeile (count "zu zählen .") ist gut. Wenn die Zeile nur "*" enthält, möchte ich die Originalzeile der Textdatei kopieren.

Ich möchte die Ausgabe wie folgt aussehen:

* * 
11 
* * 
* * 
* * 
4 
* * 
10 
* * 
9 
* * 
* * 

jedoch jetzt der beste Weg, dies zu tun, ich finden kann, ist mit:

awk -F\. '{print NF-1}' myfile.txt 

aber offensichtlich gibt mir 0'en in die "*" Zeilen.

Irgendwelche Ideen?

+0

'awk '!/^ \ */{Print;}/^ \ */{print NF;}' file' –

Antwort

1

Bedingte Betreiber zu prüfen, ob Datensatz nur Leerzeichen und * s hat:

$ awk '{ print (/[^ *]/ ? NF : $0) }' file 
* * 
11 
* * 
* * 
* * 
4 
* * 
10 
* * 
9 
* * 
* * 
+1

Die Lösung funktioniert mit oder ohne $ 0 ~ in den oben genannten. Vielen Dank! – Kosagl

Verwandte Themen