2017-06-01 9 views
0

Ich habe folgende einfache CSV-Datei:Vim - wie man awk Befehl übergeben Argument

sno, name , age, gender 
1 , abc, 30, M 
2 , xyz, 60, F 
3, def, 30, M 

Ich möchte awk verwenden eine bestimmte Spalte zu finden bedeutet der. Ich habe folgende Code versucht:

command -nargs=1 Colmean %!awk -F',' '{ total += $<args>} END { print total/(NR-1)}' 

verwendet werden, wie folgt:

:Colmean 3 

jedoch das Argument '3' ist nicht auf awk Befehl übergeben wird. Das Verwenden von doppelten Anführungszeichen anstelle von einfachen Anführungszeichen funktioniert ebenfalls nicht.

Wo ist das Problem und wie kann es gelöst werden? Vielen Dank.

+0

Warum möchten Sie dies in einem Editor statt einfach von der Befehlszeile aus tun? –

+0

Vielleicht einfacher, analysieren, während Sie die Datei sehen. – rnso

+1

Mit Excel oder ähnlichem wäre einfacher und klarer dafür. Sayin '.... –

Antwort

1

Hinweis, die Sie nicht awk hier brauchen:

command! -range=% -nargs=1 ColMean echo eval(join(map(getline(<line1>,<line2>), 'split(v:val, ", ")[<args>]'), '+'))/(<line2>-<line1>+1.0) 

Zurück zu Ihrer Frage, Befehl Zuordnungen verändern können, was Sie ausführen wirklich. Sie können :debug 2,$ColMean 3 auf Ihrem Puffer versuchen, um zu sehen, was passiert.

Verwandte Themen