Hier ist der Teil des bash
Skripts, cpuid
der unter Linux (Ubuntu / Fedora) entdeckt wird:
/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`
Für meinen Laptop ergibt dieser Teil des Skripts (hier gezeigt) 60.
Wie geht das nun mit NUR lokalen Variablen, ohne dass eine Zwischendatei ( cpu.txt
) beteiligt ist?
quelle
cat
in der ersten Zeile sollte nicht da sein. Dadurch wird der CPUID der Inhalt der ausführbaren Binärdatei und nicht deren Ausgabe zugewiesen.sed
Da ich 8 Kerne habe, sendet mein PC Folgendes aus:
tac kehrt die Reihenfolge der Zeilen von cpuid um, so dass ich ^ CPU als Terminator eines CPU-Datensatzes verwenden kann. Ein ebenfalls erweitertes Modell und eine erweiterte Familie treten dann in der richtigen Reihenfolge auf
quelle
Dies optimiert Ihre anfänglichen Befehle nicht, aber das Semikolon ermöglicht es Ihnen, zwei Befehle zusammenzusetzen, um die Verkettungsoperation vollständig zu vermeiden:
Oder spezifisch für Ihre Situation:
Wenn Sie sich für die Zeilenumbrüche interessieren, sollten Sie vor dem ersten
$(
und nach dem Schließen doppelte Anführungszeichen setzen)
quelle
Hier ist eine Möglichkeit, dies zu tun
awk
(die gesamte Ausgabe erfolgt gemäß dem Code in Ihrer Antwort).Wenn Sie am Ende immer wieder dieselbe Eingabe erneut verarbeiten, weist dies normalerweise darauf hin, dass ein anderer Ansatz möglicherweise besser ist.
awk
ist perfekt für die Verarbeitung von Texteingaben wie diese.awk
Programme sind viel länger als die Dinge, mitsed
denen sie gemacht wurden , aber sie sind viel einfacher zu lesen und Sie können ihnen Druckanweisungen hinzufügen, um das Debuggen viel einfacher zu machen .Ich habe meine Debugging-Anweisungen in (auskommentiert) gelassen. Sie können sie auskommentieren, um zu sehen, wie das Skript funktioniert.
Sie müssen das
awk
Programm irgendwo platzieren, und der einfachste Ort in einem einzigen Anwendungsfall wie diesem ist, das Ganze in einer einfachen Zeichenfolge in Anführungszeichen in derawk
Befehlszeile zu setzen.Auf diese Weise müssen Sie es nicht in einer separaten Datei oder in einer temporären Datei speichern, sodass keine Dateiverwaltung erforderlich ist und das Skript für sich allein steht.
Dieses Programm sieht lang aus, aber es sind fast alle Kommentare, Debugging-Anweisungen und Leerzeichen.
quelle
Bisher lese ich alle Kommentare und werde versuchen, sie alle zu verwenden. Wie ich an NGRhodes schrieb: "Leider bin ich kein Experte für Sed, Awk und Perl, aber ich habe ein anfängliches Verständnis.
Vielen Dank an alle, die diese hervorragenden Beispiele gemacht / präsentiert haben. Ich hoffe aufrichtig, dass viel mehr Leute diese Zeilen lesen und ihre Skriptfähigkeiten vertiefen werden!
Eigentlich habe ich einen Cocktail von dem gemacht, was Sie mir alle vorgeschlagen haben:
Ergebnis ist: 40651 0004-0651-0000-0000-0000-0000 was ich erwarte! :-)
quelle