Új hozzászólás Aktív témák
-
-
Headless
őstag
válasz
Headless #2657 üzenetére
megoldottam, mivel a fájlokban van egy másik separator, azt feltudtam hasnálni, nyilván a zárt forráskódű fejlesztők is azt használják szeparátornak...
Röviden: grep kikeresem a byteoffseteket a separatorokhoz, majd végig megyek rajtuk while ciklusban, kiszámolom a megfelelő kezdő/végoffset értékeket és azt dd-vel szépen átmásálom. A separatort átírom, hogy ne legyen kereshető, nehogy megtalálja a zárt forráskódú szoftver fejlesztő, vagy bárki más aki rákeresneAz elején van 4 byte felesleg, valamint a separator 8 byte azt hozzáadom az előző byteoffsethez
previousByteOffset=4
imageCount=0
grep -oba ggggggg "$imageFile" |while IFS=: read byteOffset rest;do
dd if="$imageFile" of="$imageFile-$imageCount.jpg" bs=$(($byteOffset-$previousByteOffset)) count=1 skip=$previousByteOffset iflag=skip_bytes
previousByteOffset=$(($byteOffset+8))
imageCount=$(($imageCount+1))
done
-
-
prucam
tag
válasz
Headless #2192 üzenetére
Rendben. Egy kis magyarázat. Elnézést kérek.
Weblapokból, *txt-ékből, file-kből stb. szoktam az awk-val infót gyűjteni, főleg mondatkból. Néha olyan hosszúak a sorok (v. mondatok), hogy nincs kedvem "totozni" az awk-val, hogy most mezőben (mezőkben) van az info.
Ezért gondoltam arra, hátha van az awk-nak olyan funkciója, hogy mutassa meg melyik hányadik mezőben mi van.Saját egyszerű mondat pl.:
egy ketto harom negy ot
Végeredmény ez legyen:
1 egy
2 ketto
3 harom
4 negy
5 otA "read"-es megoldás jó nekem. Persze az adott sort nekem kell bemásolni a file-be. De mindig jobb mintha nekem kell számolgatni.
Az awk-nál meg van "NR==x" is, csak az adott sor számát kell "kitalálni":
Ennyi a magyarázat. Most érthetőbb?
-
beloadjoker
őstag
-
spammer
veterán
válasz
Headless #2059 üzenetére
Szerintem nem fájlnevekről van szó, hanem fájlokról, amikben keresünk (több sorban, és bármelyikben lehet a keresendő kifejezés). Ha feltétel itt most kulcsszót jelent, akkor ilyesmi:
grep -Pzl 'KEYWORD1.*\n.*KEYWORD2' *.txt
grep -Pzo 'KEYWORD1.*\n.*KEYWORD2' *.txtDe pl. ezek sem teljesen jók, mert ha a 2-es kulcsszó van előbb, már nem találja meg.
grep -Pzo 'KEYWORD1.*\n.*KEYWORD2|KEYWORD2.*\n.*KEYWORD1' *.txt
így sem találja meg mindet, mert csak az elsőt veszi figyelembe. Az egrep pedig semmit nem ad vissza ezzel.
awk '/keyword1/ && /keyword2/' *.txt szintén nem működik.
De ha mégsem kulcsszóról van szó, akkor nem ártana tudni, milyen feltételről van szó.
Ha valakit tud profi, egysoros (egy parancsos, nem pipe-os) megoldást a fentiekre, arra (én is) kíváncsi lennék.
-
Jester01
veterán
válasz
Headless #1998 üzenetére
A ciklust akkor dolgozza fel lassan, ha van benne valami lassú. A tiéd tele van külső program indítással (cut, grep, wc, sed) az enyém mind beépített ... garantáltan nagyságrendekkel gyorsabb. Ha nincs bash (vagy kompatibilis) akkor persze mindegy. A kimenet meg úgy néz ki ahogy először kérted
-
Jester01
veterán
válasz
Headless #1992 üzenetére
Tiszta bash megoldás, ami csak egyszer olvassa be a sorokat és semmilyen külső programot nem hív:
#!/bin/bash
declare -a stats
while read line
do
field=${line%;*}
field=${field##*;}
stats[$field]=$((stats[$field] + 1))
done
for field in ${!stats[@]}
do
echo "[$field,$((-100-${stats[$field]}))"
doneJa, ha a nullákat is ki kell írni, akkor simán a számokon kell iterálni, nem a tömbön:
for ((field=0;field<14;field+=1))
do
echo "[$field,$((-100-${stats[$field]:-0}))"
done -
bambano
titán
válasz
Headless #1988 üzenetére
nekem az a problémám ezzel, hogy ha shellben akarod kiértékelni a bájtokat, akkor azt a shell megpróbálja értelmezni. tehát a "$data" behelyettesítéskor nem tudom, hogy mi történik az adatokkal.
ezért lenne jobb ideiglenes fájlba letenni, vagy buherálni kicsit a fájldeszkriptorokkal... mktemp-pel tudsz biztonságosan ideiglenes fájlnevet csinálni.
utána
head -c 65536 dexter.mp4 >$tempfile
tail -c 65536 dexter.mp4 >>$tempfile
md5sum $tempfile"Rosszul értelmeztem a leírást?": nem, én voltam figyelmetlen.
szerk: ez jónak tűnik:
cat <(head -c 65536 dexter.mp4) <(tail -c 65536 dexter.mp4) | md5sum
-
bambano
titán
válasz
Headless #1986 üzenetére
dd-vel így lehet 64k-t beolvasni egy fájlból:
dd if=filenev bs=1024 count=64 of=tempfile
megfordítani egy fájlt a tac paranccsal lehet, tehát a végéről így lehet olvasni dd-vel:
tac filenev | dd bs=1024 count=64 | tac >>tempfileés md5sum tempfile
expertebb júzerek használhatják a head és a tail parancsokat is.
szerk: bocs, elfelejtettem visszafordítani a bájtokat.
-
dabadab
titán
válasz
Headless #1972 üzenetére
Erre a problémára az az általámos megoldás, hogy a kapcsolók után írsz egy dupla kötőjelet:
cat file | grep -- "$var"
Ez nem csak grepnél működik, hanem úgy általában a mindenféle command line tooloknál (az 1992-es POSIX.2 szabványban szerepel irányelvként, hogy ennek így kellene működnie).
Új hozzászólás Aktív témák
- Eladó Steam kulcsok kedvező áron!
- Új, bontatlan World of Warcraft gyűjtői kiadások
- Assassin's Creed Shadows Collector's Edition PC
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- Microsoft licencek KIVÉTELES ÁRON AZONNAL - UTALÁSSAL IS AUTOMATIKUS KÉZBESÍTÉS - Windows és Office
- Telefon felvásárlás!! iPhone 13 Mini/iPhone 13/iPhone 13 Pro/iPhone 13 Pro Max
- Maximális teljesítmény és biztonság, csak az ARCTIC mx-4-el! Adj új erőt a gépednek!
- Windows, Office licencek kedvező áron, egyenesen a Microsoft-tól - Automata kézbesítés utalással is!
- 13-14" Új és használt laptopok , üzletitől a gamerig , kedvező áron. Garanciával !
- BESZÁMÍTÁS! 2TB Samsung 980 PRO NVMe SSD meghajtó garanciával hibátlan működéssel
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest