Oto część bash
skryptu przeprowadzająca cpuid
wykrywanie w systemie 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`
Tak więc dla mojego laptopa ta część skryptu (pokazana tutaj) daje 60.
Teraz, jak to zrobić, używając TYLKO zmiennych lokalnych, bez cpu.txt
udziału pliku pośredniego ( )?
źródło
cat
W pierwszej linii nie powinno tam być. Powoduje, że CPUID przypisuje zawartość binarnego pliku wykonywalnego, a nie jego wynik.sed
ponieważ mam 8 rdzeni, mój komputer emituje:
tac odwraca kolejność linii od cpuid, dzięki czemu mogę użyć ^ CPU jako terminatora rekordu procesora, a także rozszerzony model i rozszerzona rodzina następnie występują we właściwej kolejności
źródło
Nie optymalizuje to początkowych poleceń, ale średnik pozwala na połączenie 2 poleceń, aby całkowicie uniknąć operacji konkatenacji:
Lub specyficzne dla twojej sytuacji:
Jeśli zależy Ci na nowej linii, będziesz chciał wstawić podwójne cudzysłowy przed początkowym
$(
i po zamknięciu)
źródło
Oto sposób, aby to zrobić
awk
(cały wynik, jak to zrobiono w kodzie w odpowiedzi).Ponowne przetwarzanie tych samych danych wejściowych raz za razem zwykle oznacza, że inne podejście może być lepsze.
awk
jest idealny do przetwarzania wprowadzania tekstu w ten sposób.awk
programy są znacznie dłuższe niż rzeczy zrobionesed
, ale są znacznie łatwiejsze do odczytania i można do nich dodawać instrukcje print, aby znacznie ułatwić debugowanie .Zostawiłem swoje instrukcje debugowania w (skomentowano). Możesz odkomentować je, aby zobaczyć, jak działa skrypt.
Musisz
awk
gdzieś umieścić program, a najłatwiejszym miejscem w jednym przypadku użycia, takim jak ten, jest umieszczenie całości w jednym cudzysłowie wawk
wierszu poleceń.W ten sposób nie musisz przechowywać go w osobnym pliku ani w pliku tymczasowym, więc zarządzanie plikami nie jest związane, a skrypt będzie działał sam.
Ten program wygląda na długi, ale prawie wszystkie komentarze, instrukcje debugowania i białe znaki.
źródło
Do tej pory czytam wszystkie komentarze i spróbuję je wszystkie wykorzystać. Jak napisałem do NGRhodes: „nie jestem ekspertem od sed, awk i perl, ale mam pewne wstępne zrozumienie.
Ogromne podziękowania dla wszystkich, którzy zrobili / zaprezentowali te doskonałe przykłady. Mam szczerą nadzieję, że wiele osób przeczyta te wiersze i pogłębi swoje umiejętności skryptowe!
Właściwie zrobiłem koktajl tego, co wszyscy mi zaproponowaliście:
Rezultat to: 40651 0004-0651-0000-0000-0000-0000, czego oczekuję! :-)
źródło