Siduction Forum

Siduction Forum => Scripting & Kernelhacking => Topic started by: bluelupo on 2016/04/18, 12:26:35

Title: awk Syntax
Post 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.

Code: [Select]
$ 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:
Code: [Select]
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?
Code: [Select]
$ 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
Title: Re: awk Syntax
Post by: Geier0815 on 2016/04/18, 14:03:41
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)
Title: Re: awk Syntax
Post by: Penyelam on 2016/04/18, 16:24:30
Scheint nicht an den Klammern zu liegen, ohne dem else-Zweig funktioniert's ja.
Title: Re: awk Syntax
Post by: bluelupo on 2016/04/18, 16:48:47
So ich habe das jetzt bisschen übersichtlicher gestaltet und schon klappt es. Der Knackpunkt waren die geschweiften Klammern.

Auszug aus meinem Script:
Code: [Select]
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:
Code: [Select]
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