Siduction Forum
Siduction Forum => Scripting & Kernelhacking => Topic started by: bluelupo on 2016/04/18, 12:26:35
-
Hallo Community,
ich stehe gerade mit awk vor einem Problem und komme nicht weiter. Folgender Ausdruck meckert einen Syntaxfehler an.
$ dpkg-query -W -f='${binary:Package}#${Version}#${Status}#${Recommends}\n' 'plasma*' | egrep "install ok installed" | awk -F"#" '{if (length($4)>0) printf("%-45s|%-37s|%.35s|\n", $1,$2,$4) else (print "n/a")}'
awk: Kommandozeile:1: {if (length($4)>0) printf("%-45s|%-37s|%.35s|\n", $1,$2,$4) else (print "n/a")}
awk: Kommandozeile:1: ^ syntax error
awk: Kommandozeile:1: {if (length($4)>0) printf("%-45s|%-37s|%.35s|\n", $1,$2,$4) else (print "n/a")}
awk: Kommandozeile:1: ^ syntax error
Ich möchte gerne erreichen das mir dpk-query bei dem Feld "Recommends" (in awk $4) wenn etwas drinsteht auch ausgegeben wird, ansonsten soll der String "n/a" (else) ausgegeben werden.
Die Felder $1, $2 und $4 sollen immer ausgegeben werden.
So wäre mein gewünschtes Ergebnis:
plasma-widgets-addons#4:5.4.3-1#install ok installed#n/a
plasma-workspace#4:5.4.3-2#install ok installed#kio-extras, libpam-kwallet5
Wo liegt hier mein Fehler?
EDIT:
Auch das ergibt immer noch einen Syntaxfehler. Vermutlich ist ein Klammerpaar an der falschen Stelle, aber welches?
$ dpkg-query -W -f='${binary:Package}#${Version}#${Status}#${Recommends}\n' 'plasma*' | egrep "install ok installed" | awk -F"#" '{if (length($4)>0) printf("%-45s|%-37s|%.35s|\n", $1,$2,$4) else (printf("%-45s|%-37s|%.35s|\n", $1,$2,"n/a"))}'
awk: Kommandozeile:1: {if (length($4)>0) printf("%-45s|%-37s|%.35s|\n", $1,$2,$4) else (printf("%-45s|%-37s|%.35s|\n", $1,$2,"n/a"))}
awk: Kommandozeile:1: ^ syntax error
awk: Kommandozeile:1: {if (length($4)>0) printf("%-45s|%-37s|%.35s|\n", $1,$2,$4) else (printf("%-45s|%-37s|%.35s|\n", $1,$2,"n/a"))}
awk: Kommandozeile:1: ^ syntax error
awk: Kommandozeile:1: {if (length($4)>0) printf("%-45s|%-37s|%.35s|\n", $1,$2,$4) else (printf("%-45s|%-37s|%.35s|\n", $1,$2,"n/a"))}
awk: Kommandozeile:1: ^ syntax error
-
Ist jetzt nur geraten aber printf verwendet bei awk, soweit ich weiß, keine Klammern, evtl. hängt es daran...
Guckst Du (https://de.wikibooks.org/wiki/Awk:_Grundlagen:_Aktionen#printf_format.2C_item1_.5B.2C_item2.2C_....5D)
-
Scheint nicht an den Klammern zu liegen, ohne dem else-Zweig funktioniert's ja.
-
So ich habe das jetzt bisschen übersichtlicher gestaltet und schon klappt es. Der Knackpunkt waren die geschweiften Klammern.
Auszug aus meinem Script:
dpkg-query -W -f='${binary:Package}#${Version}#${Status}#${'$RECOMMENDS'}\n' "$PROG" | egrep "install ok installed" | awk -F"#" '
{
LEN=length($4)
STRING_SHORT=substr($4,0,30)
if (LEN>=30) {printf("%-45s|%-37s|%-45s\n", $1,$2,STRING_SHORT" ...")}
if (LEN>0 && LEN<30) {printf("%-45s|%-37s|%-45s\n", $1,$2,STRING_SHORT)}
if (LEN==0 ) {printf("%-45s|%-37s|%-45s\n", $1,$2,"n/a")}
}'
Dann kommt die Ausgabe:
plasma-dataengines-addons |4:5.4.3-1 |n/a
plasma-desktop |4:5.4.3-1 |bluedevil, fonts-oxygen, kde-c ...
plasma-desktop-data |4:5.4.3-1 |plasma-framework, plasma-works ...
plasma-framework |5.16.0-1 |n/a
plasma-nm |4:5.4.3-1 |n/a
plasma-pa |5.4.3-1 |n/a
plasma-runners-addons |4:5.4.3-1 |n/a
plasma-scriptengine-javascript |4:15.08.3-1+b1 |n/a
plasma-systray-legacy |0~git20151104-ded1538-2 |n/a
plasma-wallpapers-addons |4:5.4.3-1 |n/a
plasma-widget-folderview |4:15.08.3-1 |n/a
plasma-widgets-addons |4:5.4.3-1 |n/a
plasma-workspace |4:5.4.3-2 |kio-extras, libpam-kwallet5