- Fotók, videók mobillal
- Apple AirPods Pro (2. generáció) - csiszolt almaságok
- Apple iPhone 17 - alap
- Nagyon erős ajánlat lett az Apple Watch SE 3
- Milyen GPS-t vegyek?
- iPhone topik
- Google Pixel 10 és 10 Pro összehasonlító gyorsteszt
- Itt a Xiaomi Android 16-os frissítési ütemterve a kompatibilis készülékekre
- Google Pixel topik
- A Motorola is Air mobillal készül
Új hozzászólás Aktív témák
-
vargalex
félisten
válasz
galaxy55 #2884 üzenetére
Egy nagy file-nál már van értelme. Csináltam egy 15000000 soros teszt file-t (egy sql script tartalmát többszöröztem), 1,5 GB lett (nvme ssd-n van a file):
[gavarga@gavarga-5500 migration]$ time awk '/Foglal/' test.sql > /dev/null
real 0m2,711s
user 0m2,493s
sys 0m0,214s
[gavarga@gavarga-5500 migration]$ time grep Foglal test.sql > /dev/null
real 0m0,005s
user 0m0,001s
sys 0m0,005sItt mondjuk valószínűleg túl okos a rendszer, ezért valójában lehet, hogy nem is történik grep.
File-ba írással:
[gavarga@gavarga-5500 migration]$ time awk '/Foglal/' test.sql > test_awk.result
real 0m2,782s
user 0m2,515s
sys 0m0,214s
[gavarga@gavarga-5500 migration]$ time grep Foglal test.sql > test_grep.result
real 0m1,032s
user 0m0,901s
sys 0m0,130sA 2 file természetesen azonos lett:
[gavarga@gavarga-5500 migration]$ sha256sum test_*
c8aa4496d92f75d57b66b0148de6ba5247c3dd7000707d5107f01283fa8246bc test_awk.result
c8aa4496d92f75d57b66b0148de6ba5247c3dd7000707d5107f01283fa8246bc test_grep.result -
vargalex
félisten
válasz
galaxy55 #2881 üzenetére
Már lemaradtam a szerkesztésről: a
busybox
és így az abban lévőawk
a routerén van, nem windows alatt... Windows alatt GNU awk van nála. -
vargalex
félisten
válasz
vargalex #2880 üzenetére
Van egy Windows 7-em virtuális gépben. Arra felraktam a gawk for windows és a grep for windows gnuwin32 alkalmazásokat. Az awk verziója:
D:\>awk --version
GNU Awk 3.1.6
Copyright (C) 1989, 1991-2007 Free Software Foundation.A grep verziója:
C:\>grep --version
GNU grep 2.5.4
Copyright (C) 2009 Free Software Foundation, Inc.Az escape-os verzió tökéletesen működik:
D:\>grep "^CLIENT_LIST" status.txt | awk -F, "{print sprintf(\"%-23s%-25s%-20s%s
\",$8,$3,$10,$13)}"
2024-06-25 23:53:12 192.168.1.111:40175 joskapista AES-256-GCM
2024-06-25 23:53:12 192.168.1.10:40175 gizi AES-256-GCM
2024-06-25 23:53:12 192.168.1.2:40175 nagyonhosszunevu AES-256-GCMSzerk.:
#2881 galaxy55: igen, ezt olvastam és ezért én tegnap raktam fel egy OpenVPN-t a windows 7 virtuális gépre, de az nem rakott fel sem grep-et, sem awk-t. -
vargalex
félisten
válasz
galaxy55 #2877 üzenetére
Windows hiányában nekem más ötletem nincs. A probléma ugye az, hogy a Windows-os awk az aposztrófot nem eszi meg, az idézőjelet pedig awk-n belül nem a fenti módon lehet escape-olni (ha egyáltalán lehet). A tabulátor sajnos nem jó megoldás, mert a nagyon különböző hosszúságú értékek esetén el fog csúszni. A hossztól függően kellene 1, vagy 2 tabulátort tenni.
-
vargalex
félisten
Nincs windows-om, de talán még ezzel próbálkoznék:
grep "^CLIENT_LIST" status.txt | awk -F, "{print sprintf(\"%-23s%-25s%-11s%s\",$8,$3,$10,$13)}"
A cat-ot kivettem, mert teljesen felesleges subprocess lesz belőle.
Ha nem megy, akkor a következőt tedd be pl. egy
script.awk
nevű file-ba:{print sprintf("%-23s%-25s%-11s%s",$8,$3,$10,$13)}
Majd a futtatás:
grep "^CLIENT_LIST" status.txt | awk -F, -f script.awk
-
vargalex
félisten
válasz
bambano #2855 üzenetére
A routeren busybox-os awk-s parancsa fut le rendben...
#2851 tjsz: Egyébként én is az idézőjelekre gondolok (a külsőt én is aposztrófra cserélném), illetve ahogy a kolléga írja, egyetlen printf is elég az awk-ban. Egyébként ha az AWK már szétbontja oszlopokra, akkor minek egyáltalán printf és oszlop szélesség igazítás? Nem elég így:
cat status|grep "^CLIENT_LIST"|awk -F, '{print $8, $3, $10, $13}'
-
vargalex
félisten
Érdekes, mert mennie kell a sed-es megoldásnak:
[gavarga@gavarga-5500 test]$ echo "Áuu, hosszú: ú" > forras.txt
[gavarga@gavarga-5500 test]$ sed 's/./\0\n/g' forras.txt
Á
u
u
,
h
o
s
s
z
ú
:
ú
A file is biztosan UTF-8-as? Mit mond nálad a
file forras.txt
(vagy esetedben, ha file a forrás állomány neve a
file file
) parancs?Ezt kellene, hogy visszaadja:
[gavarga@gavarga-5500 test]$ file forras.txt
forras.txt: Unicode text, UTF-8 text
Szerk: egyáltalán GNU sed-et használsz? Nem valami embedded rendszeren lévőbusybox
-os sed-et? -
vargalex
félisten
Tipikusan egy PID file létrehozásával szokták ezt megoldani (ami úgy szép, ha valóban a PID-et tartalmazza), amit a script végén törölsz. Induláskor pedig ellenőrzöd, hogy létezik-e és az a PID fut-e valóban (esetleg még azt, hogy valóban a saját scripted-e). Ha létezik a file és a PID is, akkor a scriptnek vége. Ha nem, akkor létrehozod a file-t, beleírva a PID-et és mehet a tényleges feladat végrehajtása. A file-t router esetén vagy külső tárolóra, vagy még inkább ramdrive-ra (tipikusan a /tmp, illetve a /var is ilyen pl. OpenWrt alatt) célszerű létrehozni, nem a véges írást biztosító flash-ra.
-
vargalex
félisten
Ahogy a kolléga írja. Az első oszlop a DHCP lease lejárta. Elég erőforrás pazarló lenne ezt a file-t minden másodpercben újraírni...
Esetleg saját scriptet használsz (dhcp-script, vagy dhcp-luascript paraméter) és az írja a lease file-t, a dnsmasq-nál pedig a -9, vagy --leasefile-ro kapcsolóval kikapcsolod a lease file írását. Ez utóbbi magyarázná azt is, hogy miért csak egy új IP kéréskor íródik a file... -
vargalex
félisten
válasz
Fecogame #2663 üzenetére
Ha tudod a tizedes jegyek számát, akkor:
echo | awk '{printf "%.13f", (100-0.11)*0.000025442/100}'
vagy a awk BEGIN-ben echo nélkül:
awk 'BEGIN {printf "%.13f", (100-0.11)*0.000025442/100}'
Természetesen, ha csak az általad írt kerekített érték kell, akkor a formátum a
"%.11f"
.
Nem értem, hogy miért használod a beágyazott AWK-t...
Egyébként az AWK programot sima aposztrófok közé szokás tenni, így nincs kavarodás a printf formátum leírójával. -
vargalex
félisten
Tudom, nem válasz a kérdésedre, nem nem lenne jobb egy verziókezelő bevezetése?
De, hogy valami ötletet is mondjak: levágnám a könyvtárak neveiből az utolsó _-tól, majd nyomnék rá egy uniq-ot. Ekkor megvannak a projektek nevei. Majd projektenként az illeszkedő könyvtárakat sorba rendezném és a 2 legnagyobb kivételével törölném.
-
vargalex
félisten
válasz
Mr Dini #2245 üzenetére
Én valami ilyesmit csinálnék:
rsscontent=$(echo -e $(echo "rsscontent=<változó szöveg>&Submit=Submit" | sed -e 's/^rsscontent=\([^&]*\)&\(.*\)/\1/' | sed 'y/+/ /; s/%/\\x/g'))
Azaz, ha URL encode-olva jön, és az rsscontent tartalma pl.: "változó&szöveg":
gavarga@gavarga-e5540 ~ % rsscontent=$(echo -e $(echo "rsscontent=v%C3%A1ltoz%C3%B3%26sz%C3%B6veg&Submit=Submit" | sed -e 's/^rsscontent=\([^&]*\)&\(.*\)/\1/' | sed 'y/+/ /; s/%/\\x/g'))
gavarga@gavarga-e5540 ~ % echo $rsscontent
változó&szöveg -
-
vargalex
félisten
válasz
spammer #2151 üzenetére
Ez igaz. Viszont az is lehet, hogy ő konkrétan a file tartalmát akarja módosítani (és nem kiíratni a módosított változatot), akkor pedig már ezt tanulja meg
:
sed -i 's/\b19\([0-9]\{2\}\)\b/20\1/g' a
ahol a végén szereplő "a" természetesen a file neve, amit a példájából néztem.
-
vargalex
félisten
válasz
beloadjoker #2142 üzenetére
Szia!
Én ezt tenném:
cat a | sed 's/\b19\([0-9]\{2\}\)\b/20\1/g'
Új hozzászólás Aktív témák
- Keresem az alábbi PC játékokat! (Teljes lista a leírásban!)
- Antivírus szoftverek, VPN
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Játékkulcsok a legjobb áron: Steam
- Game Pass Ultimate előfizetések 4 - 19 hónapig azonnali kézbesítéssel a LEGOLCSÓBBAN! AKCIÓ!
- Kezdő Gamer PC-Számítógép! Csere-Beszámítás! I5 7500 / GTX 1050Ti / 16GB DDR4 / 128SSD+1TB HDD
- RÉSZLETFIZETÉS.BANKMENTES.KAMATMENTES ASUS Vivobook 17 X712EA-AU737W Notebook
- HIBÁTLAN iPhone 14 128GB Midnight -1 ÉV GARANCIA - Kártyafüggetlen, MS3527, 94% Akkumulátor
- Samsung Galaxy A32 128GB, Kártyafüggetlen, 1 Év Garanciával
- Bomba Ár! Lenovo ThinkPad E14 G2 AMD - Ryzen 5 I 8GB I 256SSD I 14" FHD I HDMI I W11 I Gari
Állásajánlatok
Cég: Laptopműhely Bt.
Város: Budapest
Cég: PCMENTOR SZERVIZ KFT.
Város: Budapest