seduction
 Language:
Welcome, Guest. Please login or register.
Did you miss your activation email?
2020/02/29, 14:37:54


Help

Author [EN] [PL] [ES] [PT] [IT] [DE] [FR] [NL] [TR] [SR] [AR] [RU] Topic: awk Syntax  (Read 1569 times)

0 Members and 1 Guest are viewing this topic.

Offline bluelupo

  • Global Moderator
  • User
  • *****
  • Posts: 2.066
    • http://bluelupo.net
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: 486
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: 144
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

  • Global Moderator
  • User
  • *****
  • Posts: 2.066
    • http://bluelupo.net
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