web-dev-qa-db-fra.com

Enregistrement de la sortie awk dans une variable

Quelqu'un peut-il m'aider avec ce problème?

J'essaie de sauvegarder la sortie awk dans une variable.

variable = `ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}'`
printf "$variable"

EDIT: $ 12 correspond à un paramètre exécuté sur ce processus.

Merci!

23
Jeremy
#!/bin/bash

variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'`
echo $variable

Notez qu'il n'y a pas d'espace après le signe égal.

Vous pouvez également utiliser $() qui permet l’imbrication et qui est lisible.

29
wens

Je pense que la syntaxe $ () est plus facile à lire ...

variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}')

Mais le vrai problème est probablement que $12 ne devrait pas être exclu avec ""

Edité depuis que la question a été modifiée, cela retourne des données valides, mais le résultat attendu de ps -ef et ce qui est attendu dans la variable ne sont pas clairs.

11
NiKiZe

comme indiqué précédemment, la définition de variables bash n'autorise pas les espaces entre le nom de la variable sur le LHS et la valeur de la variable sur le RHS du signe '='.

awk peut tout faire et éviter le supplément "grep" de la section "awk". L'utilisation de la commande printk de awk ne permet pas d'ajouter un "\ n" inutile dans la chaîne, ce qui donnerait des informations sur les programmes Perl-ish matcher. Le développement de variable/paramètre pour votre cas dans bash n'a pas ce problème, donc l'un des deux fonctionne:

variable=$(ps -ef | awk '/port 10 \-/ {print $12}')

variable=`ps -ef | awk '/port 10 \-/ {print $12}'`

Le modèle de correspondance d'enregistrement «-» int de awk supprime la nécessité de supprimer awk lui-même des résultats de la recherche.

1
georgey
variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')

Le [p] est une astuce pour supprimer la recherche de ps

@Jeremy Si vous publiez le résultat de ps -ef | grep "port 10" et ce dont vous avez besoin dans la ligne, il serait plus facile de vous aider à obtenir la syntaxe correcte.

0
Jotne