Welcome, Guest. Please login or register.
Did you miss your activation email?

Author Topic: [DE] awk Syntax  (Read 7231 times)

Offline bluelupo

  • User
  • Posts: 2.068
    • BluelupoMe
[DE] awk Syntax
« 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
« Last Edit: 2016/04/18, 12:42:14 by bluelupo »

Offline Geier0815

  • User
  • Posts: 586
Re: awk Syntax
« Reply #1 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
Wenn Windows die Lösung ist...
kann ich dann bitte das Problem zurück haben?

Offline Penyelam

  • User
  • Posts: 220
Re: awk Syntax
« Reply #2 on: 2016/04/18, 16:24:30 »
Scheint nicht an den Klammern zu liegen, ohne dem else-Zweig funktioniert's ja.

Offline bluelupo

  • User
  • Posts: 2.068
    • BluelupoMe
Re: awk Syntax
« Reply #3 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