Portál AbcLinuxu, 11. května 2025 05:09

Dotaz: awk jednoduchá string operace

16.10.2011 10:35 jarekkkk
awk jednoduchá string operace
Přečteno: 285×
Odpovědět | Admin
Dobrý den, potřebuji ve své aplikaci uživateli zobrazovat číslo verze gcc a nevím jak mám vyselektovat to číslo z výpísu version:
gcc --version

gcc (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
S awk neumím, děkuji za ochotu...

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

pepe_ avatar 16.10.2011 11:09 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Odpovědět | | Sbalit | Link | Blokovat | Admin

Střílím od boku

#!/bin/bash
verze_gcc=$(`which gcc` --version | grep 'gcc' | awk '{printf $4 };')
if [ -n verze_gcc ];then
echo "Verze GCC je $verze_gcc"
else
echo "GCC není nainstalováno"
fi

pepe_ avatar 16.10.2011 11:12 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: awk jednoduchá string operace

oprava uvozovek

 

#!/bin/bash
verze_gcc=$(`which gcc` --version | grep 'gcc' | awk '{printf $4 };')
if [ -n "$verze_gcc" ];then
echo "Verze GCC je $verze_gcc"
else
echo "GCC není nainstalováno"
fi

16.10.2011 11:21 l4m4
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Co má vylepšit

`which gcc`

oproti

gcc

? Nepočítaje to, že při neexistujícím gcc první chybovou hlášku vyhodí už to which a následně se to pokusí spustit program jménem --version, což lze za zlepšení považovat jen stěží.

Jaký je význam spoustění awk na výstpu grepu?

Navíc to IMO vůbec neřeší problém, tedy co za roztodivné věci se mohou objevit v té závorce.
pepe_ avatar 16.10.2011 11:26 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: awk jednoduchá string operace

přidá tam i cestu k gcc

 

pepe@PC-Pepe:~$ which gcc
/usr/bin/gcc

pepe_ avatar 16.10.2011 11:28 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: awk jednoduchá string operace

pepe@PC-Pepe:~$ verze_gcc=$(`which lolo` --version | grep 'gcc' | awk '{printf $4 };')
--version: command not found
pepe@PC-Pepe:~$ echo $verze_gcc

pepe@PC-Pepe:~$

 

takze ikdyz gcc neni tak hlasku to vyplni ale script pozna ze gcc neni protoze promena verze_gcc nebude obsahovat nic

pepe_ avatar 16.10.2011 11:31 pepe_ | skóre: 48
Rozbalit Rozbalit vše Re: awk jednoduchá string operace

pokud chces zamezit i vypsani chyby tak is posli do NULL

 

 

verze_gcc=$(`which gcc` --version 2> /dev/null | grep 'gcc' | awk '{printf $4 };')

16.10.2011 11:39 l4m4
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
A to je konkrétně k čemu? Celé to funguje stejně (ne-li lépe) i bez which.
16.10.2011 11:36 oiufoj
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Odpovědět | | Sbalit | Link | Blokovat | Admin
gcc --version | awk '{if( /^gcc/ ) print $NF; }'

(pricems predpokladame, ze cislo verze je posledni pole na radku zacinajicim gcc).
16.10.2011 11:47 l4m4
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Jenže to není ani náhodou.

GCC vypisuje jako verzi dost divoké věci. Např. na běžných linuxových distribucích to může vypadat:
gcc (Debian 4.3.2-1.1) 4.3.2
gcc (GCC) 4.6.1 20110908 (Red Hat 4.6.1-9)
gcc (SUSE Linux) 4.5.0 20100604 [gcc-4_5-branch revision 160292]
gcc (SUSE Linux) 4.3.1 20080507 (prerelease) [gcc-4_3-branch revision 135036]
gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5)
etc.
16.10.2011 11:37 l4m4
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Odpovědět | | Sbalit | Link | Blokovat | Admin
(a) Tvoje aplikace je v awk. V tom případě bych předpokládal, že umíš v awk použít regulární výraz a verzi z toho vyknousnout.

(b) Tvoje aplikace není v awk. V tom případě nerozumím požadavku na použití awk. Nemůže postě aplikace přečíst výstup gcc --version a vzít z něj verzi?

Nicméně abych jen nekafral, fungovat by mohlo toto:
awk '(NR==1){print gensub(/^gcc (\([^)]*\) *)?([0-9]+\.[^ ]+) .*/,"\\2","g")}'
Vypíše se čistě verze, bez závorek před, po, dat a kdovíčeho. Pokud závorek před může být víc (neviděl jsem), tak by se ? musel nahradit *.
16.10.2011 11:55 l4m4
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
No, takže na Ubuntu není dost obecné ani tohle. Toto už by snad mohlo:
awk '{gsub(/\([^)]*\)/,"");gsub(/\[[^]]*\]/,"");print gensub(/.* ([0-9]+\.[^ ]+).*/,"\\1","g")}'
16.10.2011 12:09 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Odpovědět | | Sbalit | Link | Blokovat | Admin
S awk neumím ... tak použijte sed :-)
gcc --version | sed -n -e 's/^gcc ([^)]*) \([1-9.]*\)$/\1/p'
nebo kratší méně přesné:
gcc --version | sed -ne 's/^gcc.* \([1-9.]*\)$/\1/p'
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
16.10.2011 12:26 l4m4
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Funguje pouze na jediném z uvedených pěti příkladů výstupu gcc --version...
16.10.2011 12:40 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Taky jsem to dělal jen na uvedený výstup :-)
gcc --version | sed -ne 's/^gcc.*\s\([0-9]\.[0-9].[0-9]\)\($\|\s.*$\)/\1/p'
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
16.10.2011 12:48 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Drobná oprava: gcc --version | sed -ne 's/^gcc.*\s\([0-9]\.[0-9]\.[0-9]\)\($\|\s.*$\)/\1/p'
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
16.10.2011 13:30 benn | skóre: 18
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Odpovědět | | Sbalit | Link | Blokovat | Admin
A zjištění verze gcc pomocí dumpversion se ti nehodí?
gcc -dumpversion
Jinak v aplikaci je přístupné makro __VERSION__ od kompilátoru
printf(__VERSION__);
16.10.2011 14:55 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
Ad. -dumpversion
Tý jo, 300 let to používám a ani mě nenapadne, že by tam takového něco mělo být. :-(
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
16.10.2011 15:10 l4m4
Rozbalit Rozbalit vše Re: awk jednoduchá string operace
No vida.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.