Portál AbcLinuxu, 5. května 2025 15:10

Dotaz: Optimalizace awk/sed

3.7.2015 12:23 MilanC | skóre: 16
Optimalizace awk/sed
Přečteno: 456×
Odpovědět | Admin
Ahoj, potřebuji v souboru na řádku 3 přepsat/inkrementovat existující číselnou hex hodnotu o 1. Moc se mi nelíbí, co jsem vymyslel, ale s awk/sed se ještě příliš nekamarádím, tak to neumím vymyslet lépe. Budu rád za doporučení a optimalizaci. Děkuji.
IV_old=$(awk 'NR==3' $key_file_info | awk '{print toupper($0)}')
IV_new=$(echo "ibase=obase=16;$IV_old+1" | bc)
sed -i "3s/.*/$IV_new/g" $key_file_info

Ř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

3.7.2015 12:43 MilanC | skóre: 16
Rozbalit Rozbalit vše Re: Optimalizace awk/sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
Tak se mi ještě podařilo vyhodit bc, díky čemuž nemusím převádět na velká písmena
IV_old=$(awk 'NR==3' $key_file_info)
IV_new=$(printf %x $((0x$IV_old + 1)))
sed -i "3s/.*/$IV_new/g" $key_file_info
wamba avatar 3.7.2015 13:57 wamba | skóre: 38 | blog: wamba
Rozbalit Rozbalit vše Re: Optimalizace awk/sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
pokud ti nevadí (oneline) Perl, tak třeba
perl -i -nE '$.==3 ? printf "%X\n", hex($_)+1 : print' /tmp/file_info.txt
This would have been so hard to fix when you don't know that there is in fact an easy fix.
3.7.2015 19:54 Delaunay | skóre: 17 | blog:
Rozbalit Rozbalit vše Re: Optimalizace awk/sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud bych musel použít jen awk/sed:
IV_new=$(awk '{if(FNR==3){printf "%x\n",strtonum("0x"$1)+1}}' $key_file_info)
sed -i "3c\\$IV_new" $key_file_info
7.7.2015 10:55 RM
Rozbalit Rozbalit vše Re: Optimalizace awk/sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
Sedík umí spouštět program uvnitř bufferu, takže jde třeba tohle:

sed -i '3{s/.*/echo $((0x&+1))/e ; s/.*/printf \"%x\\n\" &/e'} file.txt
7.7.2015 18:34 Delaunay | skóre: 17 | blog:
Rozbalit Rozbalit vše Re: Optimalizace awk/sed
Odpovědět | | Sbalit | Link | Blokovat | Admin
Případně kratší varianta za použití kombinace sed a dc:
sed -i '3{s/.*/\U&/;s/.*/dc -e"16i10o& 1+p"/e}' $key_file_info
7.7.2015 19:13 RM
Rozbalit Rozbalit vše Re: Optimalizace awk/sed
Jj, s dc by to šlo :). Nějak na tu reverzní polskou notaci zapomínam. Takhle je to o pár ms rychlejší.

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.