Voici la partie du bash
script faisant la cpuid
découverte sous Linux (Ubuntu / Fedora):
/usr/bin/cpuid > id.txt
CPUID=id.txt
echo `grep "extended model" $CPUID` | sed 's/0x//' | awk ' { print $4 } ' > cpu.txt
a=`cat cpu.txt`
echo `grep "extended family" $CPUID`| sed 's/0x//' | awk ' { print $4 } ' > cpu.txt
a+=`cat cpu.txt`
Donc, pour mon ordinateur portable, cette partie du script (illustré ici) donne 60.
Maintenant, comment faire cela en utilisant UNIQUEMENT des variables locales, sans cpu.txt
impliquer le fichier intermédiaire ( )?
la source
cat
dans la première ligne ne devrait pas être là. Elle fait que CPUID se voit attribuer le contenu de l'exécutable binaire plutôt que sa sortie.sed
comme j'ai 8 cœurs, mon pc émet:
tac inverse l'ordre des lignes de cpuid afin que je puisse utiliser ^ CPU comme terminateur d'un enregistrement CPU, un modèle également étendu et une famille étendue apparaissent ensuite dans le bon ordre
la source
Cela n'optimise pas vos commandes initiales, mais le point-virgule vous permet de regrouper 2 commandes pour éviter complètement l'opération de concaténation:
Ou, spécifique à votre situation:
Si vous vous souciez des nouvelles lignes, vous voudrez mettre des guillemets doubles avant l'initiale
$(
et après la fermeture)
la source
Voici un moyen de le faire
awk
(la sortie entière comme le fait le code dans votre réponse).Lorsque vous finissez par retraiter la même entrée encore et encore, cela indique généralement qu'une autre approche pourrait être meilleure.
awk
est parfait pour le traitement de texte comme celui-ci.awk
les programmes sont beaucoup plus longtemps que les choses avecsed
, mais ils sont beaucoup plus faciles à lire et vous pouvez les ajouter des instructions d'impression pour faire le débogage beaucoup plus facile.J'ai laissé mes déclarations de débogage dans (commenté). Vous pouvez les décommenter pour voir comment fonctionne le script.
Vous devez mettre le
awk
programme quelque part et l'endroit le plus simple dans un cas d'utilisation unique comme celui-ci est de mettre le tout dans une seule chaîne entre guillemets sur laawk
ligne de commande.De cette façon, vous n'avez pas besoin de le stocker dans un fichier séparé ou dans un fichier temporaire, il n'y a donc pas de gestion de fichiers impliquée et le script sera autonome.
Ce programme semble long, mais c'est presque tous les commentaires, les instructions de débogage et l'espace blanc.
la source
Jusqu'à présent, je lis tous les commentaires et je vais essayer de les utiliser tous. Comme je l 'ai écrit à NGRhodes: "malheureusement, je ne suis pas expert en sed, awk et perl, mais j'ai une première compréhension.
Un grand merci à tous ceux qui ont fait / présenté ces excellents exemples. J'espère sincèrement que beaucoup plus de gens liront ces lignes et approfondiront leurs compétences de script!
En fait, j'ai fait un cocktail de ce que vous m'avez tous suggéré:
Le résultat est: 40651 0004-0651-0000-0000-0000-0000 ce que j'attends! :-)
la source