Új hozzászólás Aktív témák
-
bambano
titán
válasz
Jester01 #1097 üzenetére
új kérdés: van ötleted, hogy lehetne helyben módosítani egy fájlt?
ha csinálok egy ilyet:
sed .... file.txt >file.txt akkor a fájl értelemszerűen üres lesz, ezért el kell másolni valahova, onnan indítani a sed-et és visszairányítani a helyére. van ötleted, hogy másolás nélkül ezt hogy lehet? vi batch módban vagy ilyesmi? -
Jester01
veterán
Nem biztos, hogy jól értettem a feladatot mert kicsit zavaros a megfogalmazás, az első két sorra viszont jó
$ cat >script.sh
#! /bin/bash
count=`wc -l "$1"`
count=${count%% *}
slice=$((count / 6))
exec 3< "$1"
for ((i=0;i<3;i+=1))
do
for ((j=0;j<slice;j+=1))
do
read -r -u 3 line
buffer[j]=$line
done
for ((j=0;j<slice;j+=1))
do
read -r -u 3 line
echo ${buffer[j]} $line
done
done
$ chmod +x script.sh
$ seq 1 24 >in.txt
$ ./script.sh in.txt
1 5
2 6
3 7
4 8
9 13
10 14
11 15
12 16
17 21
18 22
19 23
20 24 -
pomm
tag
Sziasztok!
Kicsit elakadtam, hátha van valakinek valami használható ötlete, hogy hogyan is kellene megoldanom ezt a problémát.
Van egy darab fájlom, amiben van x darab sor. Nem tudom előre soha a sorok pontos számát, csak azt, hogy a sorok száma minden esetben hattal osztható. Nekem össze kellene fűznöm azokat a sorokat, amelyekaz adott sor száma + (az összes sorok száma osztva hattal).
Tehát érthetőbben:
Ha van 24 sorom, akkor az elsőt a 1+(24/6) sorral, tehát az ötödikkel kellene úgy összeraknom, hogy a első sor mögé rakja az ötödik sort, a második mögé a 2+(24/6) sort, azaz a hatodikat. Ha végére ér, újra kezdi, ezt egészen addig, amíg a sorok száma hattal osztható.
Minden ötletet előre is köszönök! -
sonar
addikt
Sziasztok,
Hogyan tudnám azt megcsinálni, hogy a sed-nek több mintát adok be?
Jelenleg csak a Debreceni VSC-ből csinál Debrecent, de ha én még egy kör alatt mondjuk a Fradi-ból Ferencvárost akarok csinálni azt hogyan tudnám kivitelezni?#!/bin/bash
OLD="Debreceni VSC"
NEW="Debrecen"
DPATH="proba.txt"
BPATH="proba1.txt"
cat $DPATH | sed "s/$OLD/$NEW/g" > $BPATH -
lapa
veterán
#!/bin/sh
if dmidecode -t baseboard | grep 1ZGA097Y1BL >/dev/null then
echo "client"
else
echo "fazom"
fi./test: 5: Syntax error: "else" unexpected (expecting "then")
upd: OK, szóval >/dev/null [B];[/B] then úgy néz ki műx. köszi mindkettőtöknek.
-
Jester01
veterán
válasz
bambano #1093 üzenetére
A -eq az jogos, nem vettem észre.
A ; csak akkor kell, ha egy sorban van.
A hibaüzenet viszont attól van amit írtam. Amíg az rossz, addig a shell nem is lát neki futtatni. A -eq dolog már csak a test kapcsolója, az majd reklamál magának:
line 3: [: eq: binary operator expected
-
Jester01
veterán
Azzal nincs baj, az else blokk üres és azt nem szereti. Vagy töröld ki az else-t vagy írjál bele valamit.
MOD: amúgy az a wc ott nagyon csúnya ... a grep-nek is van visszatérési értéke. Szóval olyasmi lehetne, hogy
if dmidecode -t baseboard | grep 1ZGA097Y1BL >/dev/null
then
...
fi -
lapa
veterán
komolyan hülye vagyok, de ez már a 86. verzió és nem műx (./test: 7: Syntax error: "fi" unexpected)
#!/bin/sh
if [ `dmidecode -t baseboard | grep 1ZGA097Y1BL | wc -l` eq 0 ]
then
echo 'client'
else
fioké szóval úgy szeretném, hogy ne egysoros legyen, hanem az echo helyett sok parancs lenne.
-
CPT.Pirk
Jómunkásember
Na az én problémám megoldódott. Semmi hiba, valszeg a fejlesztő környezet szívat engem.
-
koczka1002
csendes tag
Sziasztok!
Lenne a következő shell scriptben megírt program.A lényege hogy lottó 5öst lehet vele játszani.Nem én írtam csak szeretném megérteni és letudná valaki írni hogy sorban mit csinál?Sűrgősen kellen, nagyon megköszönném!#!/bin/bash
echo "Kapott 5000 pontot!";
echo 5000 >eredmeny.txt
function beker
{ echo "Adjon meg öt számot 1 és 90 között, szóközzel elválasztva!";
read s1 s2 s3 s4 s5;
}
function sorsol {
let b=`date +%N`;
let a=$b-$b/100*100;
if (test $a -gt 90); then sorsol; fi
if (test $a -lt 1); then sorsol; fi
}pont=`cat eredmeny.txt`;
while test $pont > 249 ;
let pont=pont-250;
echo "Jelenleg van "$pont" pontja.";
do beker;
# for (($i=1; $i<6; $i++)); do
sorsol; echo $a;
if (test $s1 == $a); then let pont=pont+1000; fi
sorsol; echo $a;
if (test $s2 == $a); then let pont=pont+1000; fi
sorsol; echo $a;
if (test $s3 == $a); then let pont=pont+1000; fi
sorsol; echo $a;
if (test $s4 == $a); then let pont=pont+1000; fi
sorsol; echo $a;
if (test $s5 == $a); then let pont=pont+1000; fi
done
echo pont; -
CPT.Pirk
Jómunkásember
Nem teljesen értem mi van. Az awk-s progi helyett OD-vel fájlba küldtem a kimenetet, minden alkalommal ilyen (különös tekintettel az első 3 számra, az értékük is pontosan ez minden alkalommal):
od -An -t c -N256 /dev/ttyUSB0 > $OUTPUTFILE
3 314 316 1 4 0 9 0 \n 4 0 9 1 4 0 9
0 \n 4 0 9 9 4 0 8 8 \n 4 0 9 0 4
0 8 9 \n 4 0 9 0 4 0 8 8 \n 4 0 9
1 4 0 9 1 \n 4 0 9 0 4 0 9 0 \n 4
0 9 3 4 0 9 1 \n 4 0 9 2 4 0 9 0
\n 4 0 9 2 4 0 9 1 \n 4 0 8 9 4 0
8 9 \n 4 0 9 0 4 0 8 8 \n 4 0 9 0
4 0 8 8 \n 4 0 9 1 4 0 9 1 \n 4 0
9 0 4 0 8 8 \n 4 0 9 1 4 0 9 1 \n
4 0 9 1 4 0 9 1 \n 4 0 9 1 4 0 9
0 \n 4 0 9 2 4 0 9 0 \n 4 0 9 1 4
0 9 1 \n 4 0 9 0 4 0 9 0 \n 4 0 9
0 4 0 8 8 \n 4 0 9 1 4 0 9 1 \n 4
0 9 0 4 0 8 9 \n 4 0 9 1 4 0 9 0
\n 4 0 9 1 4 0 9 1 \n 4 0 9 1 4 09 1 \n 4 0 9 3 4 0 9 1 \n 4 0 9 0
Az első 4 értéket nem tudom hova tenni. Ott is ~4090 körül kellene lennie a számoknak.
Az awk progi meg ezekkel a számokkal random dolgokat ment a kimeneti fájlba. Az értékek többsége -Inf, vagyis - végtelen, meg akad egy-két random negatív szám. Valamint a kiszámolt értékek száma is változó, pedig minden esetben ugyanannyi értékpárat küld az fpga, ezt figyelem az OD-vel egy másik terminálban.
-
CPT.Pirk
Jómunkásember
Ebben az AWK-ban a printf-s részt hogyan lehetne kihagyni? Ebben a formában nem csinál semmit, nem küldi el az xon karaktert, viszont nem jöttem rá, hogyan lehet kiiktatni ezt a sort.
Lehet van ott másik gond is, mert valamiért nem igen akar újabban letárolni fájlba értékeket, pedig eddig ment, aztán hozzá nem nyúltam...
BEGIN { printf ("\x11") > /dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,1,4); b[NR]=substr($0,5,4); }
NR>41 { exit 0; }
END{
for(i=1;i<41;i++) if(a[i] > 0) printf ("%4.3f\n",20*(log(b[i]/a[i])/log(10.0))) > "/home/patch/awk/output.txt";
}Úgy tervezem, hogy ebből a scriptből kerül meghívásra a fenti awk:
#!/bin/sh
INPUTFILE="/dev/ttyUSB0" #bemenet
OUTPUTFILE="/home/patch/awk/output.txt" #kimenet a plot számára
AWKFILE="/home/patch/awk/alma" #awk fájl
PLOTFILE="/home/patch/awk/plotfile" #paraméterek a gnuplot számára
WORKDIR="/home/patch/awk/"
stty -F /dev/ttyUSB0 9600 -clocal -cread -crtscts cs8 cstopb -parenb || exit 1 #soros port paraméterezés
if [ $OUTPUTFILE ]; then
rm $OUTPUTFILE #kimeneti fájlok előkészítése
fi
touch $OUTPUTFILE
if [ $PLOTFILE ]; then
rm $PLOTFILE
fi
touch $PLOTFILE
printf "set grid nopolar\nset xlabel \"frekvencia logaritmikus skalan [HZ]\x22\nset ylabel \x22amplitudo [dB]\x22\nset xrang$
printf "\x11" > $INPUTFILE #XON karakter küldése az FPGA-nak
awk -f $AWKFILE < $INPUTFILE #mért értékek letárolása
printf "\x13" > $INPUTFILE #XOFF karakter küldése az FPGA-nak
cd $WORKDIR
gnuplot ./plotfile -presistEbben a formában jól működik a karakterek elküldése.
-
CPT.Pirk
Jómunkásember
Meg lehet valahogy oldali, hogy a shell script lépjen ki, mikor az stty -F .... soros port konfiguráló parancs nem tud lefutni, mert "helytelen ioctl hívás az eszköznek" hibaüzenet van? Ilyenkor megáll a script, amíg ki nem húzom az USB-t.
A hiba okát nem tudom, egy reset után helyrejön.
-
drogery
tag
Hali,
egy beadandó feladatot kellene készítenem. Ezek közül 1et.1. Irjon C nyelvu programot, ami:
letrehoz ket gyermekprocesszt
ezek a gyermekprocesszek letrehoznak 3-3 tovabbi gyereket
ezek az unokak varakoznak nehanymasodpercet es szunjenek meg
a szulok varjak meg a gyerekek befejezodeset es csak utana szunjenek meg2. Irjon C nyelvu programokat, ami
SIGUSR1 signal erkeztekor noveli egy valtozo erteket
SIGUSR2 signal hatasara pedig kiirja a kepernyore az aktualis erteket.
amasik program pedig: futtataskor signal-t kuld az adott processznek
3. Irjon C nyelvu programokat, ami
letrehoz egy uzenetsort
ebbe az uzenetsorba betesz egy masodpercenkent egy valtozot
ennek a valtozonak a kezdoerteke legyen azaktualis processz azonositoja
a valtozo mindig beiras utan novekedjen 2-vel
a masik program pedig: kiolvas4. Irjon C nyelvu programokat, ami
hozzon letre egy osztott memoria szegmenst
a felhasznalotol olvasson be szoveget, es ezt irja be az osztott memoria teruletere eskuldjon signalt a fogado felnek, hogy kesz az uzenet (SIGUSR1)
(segitsegkeppen a masik program pid-je fixen beleteheto a programba)
a masik program pedig olvass ki azosztott mem szegmensbol, de csak egy adott signal hatasara (SIGUSR1)
vegul szuntesse meg az shm szegmenst5. Irjon C nyelvu programot, ami
letrehoz egy csovezeteket (egy file deszkriptor part)
elforkol
a gyermek egy signal hatasara elkuld egy rovid szoveget aszulonek (a signalig blokkol)
a szulo kiirja a kepernyore
megszunnek a processzek (a szulo megvarja a gyereket)6. Irjon C nyelvu programokat, ami
letrehoz egy nevesitett csovezeteket (bejegyzes az fs-en)
megnyitja
beleir valamit
kozben egy masik program kiolvassa acsovezetekbol
ezutan az elso program szinten ir bele valamit
a masik program ujbol kiolvassa
a processzek megszunnek es az elso program eltunteti a nevesitettcsovezeteket
7. Irjon C nyelvu programokat, ami
letrehoz egy osztott memoria szegmenst
az egyik program ir bele es var par masodpercet
binaris szemafor segitsegevel "vedi" az irasta masik program pedig kiolvas belole
8. Irjon C nyelvu programokat, ami
letrehoz egy filet
az egyik program ir bele es var par masodpercet
binaris szemafor segitsegevel "vedi" az irast
a masikprogram pedig kiolvas belole a file elejetol kezdve
A beadás határideje szombat 23.59.
Nyilván megfelelő kompenzálás fejében keresnék valakit, aki "segít az elkészítésében".
Többit privátban.
üdv -
CPT.Pirk
Jómunkásember
válasz
bambano #1078 üzenetére
Köszönöm!
Tudod miért számoltam el? Mert a Windows7 számológépe programozó módban volt, így nem mutatta a tizedeseket.Amúgy ez a pici eltérés, a 115273,77521613832853025936599424 Hz úgy tapasztaltam, még benne van az uart tűrésében. Majd holnap / (ma) átdolgozom a 38400 baudra a kódot.
-
CPT.Pirk
Jómunkásember
válasz
bambano #1068 üzenetére
Hoppá hoppá, meglett az "od" parancs "elcsúszásának" az oka.
Mióta ma betettem a 120MHz-es quartz oszcillátort és azt használom a +- 0.5% frekvencia erroros szilícium oszcillátor helyett, egyszer sem tévesztett az od és az sem fordult elő, hogy a kiküldött x11 helyett mást látott volna az fpga, korábban ez is gyakori volt.Szerencsére még pluszban a 120MHz az egész számú többszöröse a 115200-nak, így kerekítési hiba sincs.
740Ft volt ez a 120-as quartz, francnak nem vettem meg korábban.
-hamarosan remélem lesz egy videó róla, hogy végül is mit tud a rendszer. -
lapa
veterán
válasz
Jester01 #1072 üzenetére
ez jó ez a logrotate, csak éppen valami olyasmi jelenséggel küzdök, ami ritkán de kegyetlenül belehány sokszáz mega felesleges sort akármiről is (valami dvb driver issue, de nem fogom tudni megoldani most). szóval nem kell ez nekem, csak annyit szeretnék mint minimum, hogy ne dönthesse be a gépet ha valamiért úgy van hagyva (azaz legrosszabb esetben restart rc.local megoldja ezzel a masszív pucolósdival).
egyébként a parancs perfekt, köszönöm.
-
lapa
veterán
olyat szeretnék, hogy indításkor minden, 10mb-nál nagyobb fájlt ürítsen ki a /var/log/ -ban.
olyat találtam, hogy find -size +10000 | xargs rm
de gondolom az rm + touch kombónál egyszerűbb lenne valami >
-
CPT.Pirk
Jómunkásember
-
bambano
titán
válasz
CPT.Pirk #1065 üzenetére
persze, ahogy ctrl+q-t ki tudtál írni a \x11-gyel, idézőjelet meg aposztrófot is ki lehet írni \x22 meg \x27 a kódjuk, ha nem csalnak az emlékeim.
illetve az eredeti unix filozófia szerint escape-lni kell és akkor jó lesz, tehát ha idézőjelen belül idézőjelet akarsz, akkor \" -t kell írni.
-
CPT.Pirk
Jómunkásember
Lehet olyat csinálni a printf-el, hogy a szövegen belül idézőjel is legyen? A gnuplot paramétereket szeretném fájlba írni, ahol ilyen sorok vannak:
set valami...
set ylabel "amplitudo"
set valami...\n, meg ilyenek megvannak, csak az idézőjellel nem tudom mit kezdjek.
awk '{print "set valami\nset ylabel "amplitudo"\nset valami"}' > /home/patch/awk/plotfile
Ha awk-s printet hívom meg, az nem ad hibát, de megakasztja az egész fájlt. -
CPT.Pirk
Jómunkásember
válasz
bambano #1063 üzenetére
Köszönöm!
Most egyébként rendeltem rendes quartz oszcillátorokat, mert végre megtaláltam a leírásban, hogy egy "szilícium oszcillátor" van gyárilag a nyákon, ami egyrészt nem elég pontos a freki tartásban, másrészt +-0,5% freki hibája van, ami 50MHz-en elég cinkes. (szerintem még több is van neki, mert 47.8MHz körül szokott menni)
Csütörtök - péntek körül meglesz az új quartz, addig tökéletesítgetem a mostani cucost. Nem tudtam foglalkozni vele és ma se érzem valami frankón magam ehhez (hülye frontok), így még nincs gnuplot rajzom, de már nagyon szeretném.
-
bambano
titán
válasz
CPT.Pirk #1057 üzenetére
kis olvasnivaló linuxon soros port kezelés
-
bambano
titán
jelszót normális szoftverek nem az stdin-ről veszik, hanem a /dev/tty-ról, úgyhogy azt nem lehet echo-val betolni.
ez egy normális linuxon úgy működik, hogy átrakod az ssh kulcsodat és sima rsync. ha biztonsági gondjaid lennének, akkor a kényesebb gépről menj ki a kevésbé kényes gépre.
-
lapa
veterán
na feladom: szóval én mindenáron azt szeretném megoldani, hogy erről a gépről át tudjak rsyncelni valamit a távoli gépre. mindezt úgy, hogy mindkét (ubuntu) gépen sudo vagyok.
ezt szeretném:
1. elindítom a scriptet
2. ssh távoli gép jelszót kér
3. távoli sudo jelszót kér és mountol egy partíciót (eddig asszem megvagyok).4.
sudo rsync -a -v -z -e ssh --rsync-path='sudo rsync' \
--delete \
--exclude=/var/lib/video \
--exclude=/dev \
--exclude=/tmp \
--exclude=/proc \
--exclude=/lost+found \
--exclude=/media \
--exclude=/mnt \
--exclude=/sys / lapa@ii:/media/sdb1/5. távoli umount (ez is megvan)
a bajom a 4. ponttal van, mindenáron sudo: no tty present and no askpass program specified -et kapok.
volt egy olyan ugly workaround, hogy előtte
stty -echo; ssh myUser@REMOTE_SERVER "sudo -v"; stty echo
de ahhoz ki kéne kapcsolni a sudo per-tty ticketjét, és ha jól értem azt nem akarom szekurity részirűl.
volt ugyanitt valami ilyen megoldási javaslat, de ezt még emésztem. azt írják ebben látszik a jelszó, szóval nem tűnik nyerőnek:
rsync -R -avz -e ssh --rsync-path="echo mypassword | sudo -S mkdir -p /remote/lovely/folder && sudo rsync" /home/ubuntu/my/lovely/folder ubuntu@x.x.x.x:/remote/lovely/folder --delete
valahogy csak meg lehet ezt oldani, és szerintem elég fontos lenne. általában nagyon lényeges lenne a távoli sudo-s rsync.
-
lapa
veterán
üdv. erről a gépről szeretném megüzenni a távoli gépnek, hogy legyen kedves mountolni. ez ilyen ubuntu sudo-s módszer ugye. eddig jutottam:
ssh lapa@tavoli 'sudo mount /dev/sdb1 /media/sdb1'
ez persze nem megy. szóval parasztosan az a kérdésem, hogy hogyan hozom át a jelszó bekérését. ha át lehet. ilyen sudoers varázsokat hagynám inkább. köszi.
-
CPT.Pirk
Jómunkásember
-
CPT.Pirk
Jómunkásember
válasz
bambano #1050 üzenetére
Volt egy kis fennakadás a Xilinxesek miatt, így nem tudtam tesztelni eddig.
Beírtam, így kétszer olvas be 41 számpárt, a második beolvasás során számol és ír fájlba. Ennek nem jöttem rá az okára, hogy miért nem megy egy kör alatt.
BEGIN { printf ("\x11") > /dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,1,4); b[NR]=substr($0,5,4); }
NR>41 { exit 0; }
END{
for(i=1;i<41;i++) if(a[i] > 0) printf ("%4.3f\n",20*(log(b[i]/a[i])/log(10.0))) > "/home/patch/awk/output.txt";
} -
CPT.Pirk
Jómunkásember
válasz
bambano #1046 üzenetére
Az etc-ben nincs alternatives könyvtár. (arch alapú disztrón vagyok most) Viszont csomagkezelőben megnézve, a gawk 3.1.8-3 van telepítve, más awk-s dolog nincs.
Azt az openes sort megnéztem, ott írja is, hogy rossz ioctl eszköz, aztán alatta pár sorral meg már ott van az open után a /dev/ttyUSB0.
Beírtam a kért printf dolgot, itt van a friss pastebin: [link]
-
bambano
titán
válasz
CPT.Pirk #1045 üzenetére
biztos vagy benne, hogy gawk-ot használsz? mit mutat a
ls -l /etc/alternatives/awk
?a második pastebinben van a 82. sor:
open("0", O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE, 0666) = 3
erről nem tudom, hogy jó-e, itt szerintem /dev/ttyUSB0-nak kellene lennie, hacsak az nem egy link.A substr-t tartalmazó sor végére írj már egy printf "%d\n",NR; -t, hogy lássuk, jól számolja-e a sorokat.
-
CPT.Pirk
Jómunkásember
válasz
bambano #1044 üzenetére
Kimentettem a lényeget pastebinra: [link]
A read(4, ... sorok ismétlődnek egészen addig, amíg ki nem húzom a csatlakozót, ekkor van a close(4) = 0 sor, az alatta lévők meg az eredmények kiírása. Szóval kb. addig olvas, amíg ki nem húzom a csatlakozót.
Valamint másik probléma, hogy bár 2 helyen is van az "x11" elküldése, de egyiknél sem csinál semmit. Tegnap a bash-ból küldve ugyanezeket, ott simán működött.
Itt van a pastebin eleje is, kicsit zagyva, de hátha találsz valamit benne: [link]
-
CPT.Pirk
Jómunkásember
válasz
bambano #1036 üzenetére
Igen, ez megoldotta az értékeket.
BEGIN { printf ("\x11")>/dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,1,4); b[NR]=substr($0,5,4); }
END {
printf ("\x11") > /dev/ttyUSB0
for(i=1;i<41;i++) if(b[i] > 0) printf ("%d,%d,%f\n",a[i],b[i],20*(log(b[i]/a[i])/log(10.0)));
}A logaritmus számolást kicsit átalakítottam, de még mindig nem jó, pedig szerintem ugyanaz van ott, mint ami korábban egy függvénybe írtam:
function log10(x) {\
return log(x)/log(10.0);\
}\ -
CPT.Pirk
Jómunkásember
válasz
bambano #1034 üzenetére
Jah, b > 0, ez logikus.
Nézd meg az értékeket, a második szám első értéke az első szám utolsó számjegye.
4091,1409,0.462918
4090,0409,1.000000
4090,0409,1.000000
4091,1409,0.462918
4092,2409,0.230099
4091,1409,0.462918
4091,1409,0.462918
4098,8409,-0.312172
4090,0409,1.000000A második oszlopban el van tolódva minden szám egyel jobbra.
cat /dev... -el nézve nincs ilyen gond, ott a második oszlop hibátlan. -
CPT.Pirk
Jómunkásember
válasz
bambano #1032 üzenetére
Pici igazítás után:
BEGIN { printf ("\x11")>/dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,0,4); b[NR]=substr($0,4,4); }
END {
printf ("\x11") > /dev/ttyUSB0
for(i=1;i<41;i++) if(a[i] > 0) printf ("%d,%d,%f\n",a[i],b[i],log(a[i]/b[i])/log(10));
}erre jutottam:
4091,1409,0.462918
4090,408,1.001063
4091,1409,0.462918
4091,1409,0.462918
...
...A kódba megint kellett az a[ i ]> 0 , mert jött megint a 0-val osztás dolog, mint korábban. Az elemek száma a kimeneten stimmel, de amíg nem húzom ki az USB-t a portból, addig nem látok semmit.
Valami még nem stimmel a számolásnál. No meg érdekes, hogy 1-2 számjegy eltűnik, akár csak korábban. -
bambano
titán
válasz
CPT.Pirk #1031 üzenetére
BEGIN { printf ("\x11")>/dev/ttyUSB0; }
NR<41 { a[NR]=substr($0,0,4); b[NR]=substr($0,4,4); }
END {
printf ("\x11')>/dev/ttyUSB0
for(i=1;i<41;i++) printf ("%d,%d,%f\n",a[i],b[i],log(a[i]/b[i])/log(10));
}kb. ennyi. ezt kirakod egy fájlba, majd gawk -f awkfile /dev/ttyUSB0
-
CPT.Pirk
Jómunkásember
válasz
bambano #1029 üzenetére
Igen, kis - nagy betű különbség az megvan. Beírva szóközt, már más a helyzet. Ha a feltétel < a "kacsacsőr", akkor ez a baja: $COUNT: kétértelmű átirányítás.
Ha -lt vagy -ne (gondolom a "kevesebb mint" és a "nem egyenlő" röviden, ilyen példákat találtam neten) van a kacsacsőr helyén, akkor meg végtelen ciklusban kapom az almát.
A másik dologra visszatérve, jelenleg egy while ciklust akartam írni, ami soronként olvassa a soros portot dd, vagy a read paranccsal.
Ma még fájlba írni nem tudtam, a cat, meg mindennek a kimenete egy csomó új állományt hozott létre, a beolvasott 2 szám volt a nevük. Tehát 40924091, és így tovább állományok.
nem, nem olvassa az idők végezetéig a portot, ha a csővezeték következő lépcsője lebontja a csövet. - ezt hogy kell elképzelni?
-
bambano
titán
-
CPT.Pirk
Jómunkásember
Ebben mi a rossz?
i="0"
count="42"
while [$I < $COUNT]
do
echo alma
(( i++ ))
doneA while-os sorrarl van problémája, azt írja: ]: nincs ilyen fájl vagy könyvtár. Akkor is ez van, ha i < 42 van feltételnek megadva, csak akkor ]: helyett 42]: van a szövegben.
-
-
CPT.Pirk
Jómunkásember
válasz
bambano #1022 üzenetére
#!/bin/bash
INPUTFILE="/dev/ttyUSB0"
OUTPUTFILE="/home/patch/awk/output.txt"
rm $OUTPUTFILE
touch $OUTPUTFILE
printf "\x11" > $INPUTFILE
$INPUTFILE | awk '{a = substr($0,0,4);b = substr($0,4,4); if (a > 0) printf "%d,%d,%f",a,b >> $OUTPUTFILE}'
cat $OUTPUTFILE | while read line ; do
echo $line
#itt majd lesz valami awk megint
done
printf "\x13" > /dev/ttyUSB0Na most ezt alkottam, nagyobb részt bash, ahhoz több segítséget találtam. Az a terv, hogy az awk hívásnál menti fájlba az értékeket, majd később a cat-es rész soronkénti visszaolvasással meg egy másik awk rész fog számolni.
Viszont az awk-s sorral baja van: # ./teszt.awk
./teszt.awk: sor: 10: /dev/ttyUSB0: Engedély megtagadvaAmit nem tudom, hogy miért van.
-
CPT.Pirk
Jómunkásember
válasz
bambano #1018 üzenetére
Megvan, printf "\x11" >... küldi el megfelelően.
Valamint implementáltam az xon figyelés dolgot, most csak akkor küld az adó, ha 000010001 beérkezett és csak addig, amíg ez van.
Tudsz valami leírást, linket mutatni, ahol egyértelműen le van írva, hogy ilyesmihez hogyan csináljak ciklust, ciklusokat az awk-ban? Valahogy baromira nem áll kézre ez a nyelv. -
CPT.Pirk
Jómunkásember
válasz
bambano #1013 üzenetére
Megírtam az uart RX részét FPGA-n.
Ha kiküldök így egyszerűen valamit terminálban: printf("2") > /dev/ttyUSB0, akkor frankón a 2 ascii megfelelője, vagyis 00110010 ér oda az fpga-ra.
Viszont a vezérlő karakterek, mint a DC1, DC3 az xon xoff -nál, azt hogyan kell kiküldeni? Azt hiszem a printf az karakterenként szétbontva küldi el.
Mondjuk simán számokkal is helyettesíthetem a vezérlő karikat, de az olyan hülye megoldás lenne. -
bambano
titán
válasz
CPT.Pirk #1012 üzenetére
nem jól érted. az xon-t neked kell kiadni awk-ból, annak érkezésekor kezdhet el adni az fpga, és adhat mindaddig, amíg nem kap xoff-ot. tehát a gép felől az fpga felé megy az xonxoff és az fpga felől a gép felé menő forgalmat akasztja meg.
az rts/cts szerintem nem hardveres, de a linux driver kezeli. [link]
-
CPT.Pirk
Jómunkásember
válasz
bambano #1011 üzenetére
Izé, de akkor jól értem az xon xoff dolgot? Egyszerűen csak a DC1 / DC3 ascii vezérlő karaktereket illesszem be az adásom elejére és végére és ezekre figyeljek az awk-ban?
Amúgy a cts,rts kezelését nem a HW végzi el? Mivel az fpga figyeli a dolgokat, egy cts kérés után csak akkor kezd küldeni, ha (és ameddig) az rts szignál '1'.
Ez a dolog nekem csak annyi lenne, hogy az rts vezeték állapotváltozását fel lehetne használnom a vizsgáló szinuszjel frekvenciájának arrébb léptetésére, amit írtam neked. Most úgy van, hogy akkor léptet, mikor az AD-t követő latch betöltötte a két mért értéket, és kész küldeni őket az uart modulnak.(ez a latch csak arra kell, hogy mindkét AD-ről szinkronban kerüljenek az adatok továbbításra, nélküle lenne 5-10 órajel késés a második értéknél az elsőhöz képest)
-
CPT.Pirk
Jómunkásember
-
CPT.Pirk
Jómunkásember
válasz
bambano #1007 üzenetére
Próbálom összehozni a dolgokat kicsit, de a log. végeredménye elég random.
function log10(x) {\
return log(x)/log(10.0);\
}\
OUTPUTFILE="/home/patch/awk/output.txt"
{a=substr($0,0,4);
b=substr($0,4,4);
if (a > b)
printf("%4.2f\n", 20 * log10(b/a)); }Arra gondoltam, hogy bele kellene foglalni egy ciklusba ezt az egészet, már ha majd működik, mert akkor megoldanám fpga-ban, hogy csak akkor küldjön újabb 2 értéket, mikor ez már fel lett folgozva. Meg lehet azt csinálni, hogy amikor az a és a b be van olvasva, akkor "elengedje" a soros portot? Mert azt az eseményt tudom figyelni fpga-ból a handshaking jeleken keresztül.
-
bambano
titán
válasz
CPT.Pirk #1006 üzenetére
valahol kevered: a és $a is előfordul.
lehet, hogy érdemes lenne eredeti formája szerint bezárójelezni a printf-et:
printf("%d,%d,%f",... ) >>$outputfileigen, ha írsz valamit a kimeneti fájlba >$outputfile alakban, az csonkolni fogja.
viszont ha további feldolgozást fogsz csinálni, akkor a 10-es logaritmust lehet, nem awk-ból kellene csinálnod, nehogy lekésse a beolvasást az awk.
-
CPT.Pirk
Jómunkásember
válasz
bambano #1005 üzenetére
Beépítve a számolós sorba, sikerült fájlba írnom. Mondjuk csak a két érték ment be, a művelet eredménye nem.
function log10(x) {\
return log(x)/log(10.0);\
}\
OUTPUTFILE="/home/patch/awk/output.txt"
{a=substr($0,0,4); b=substr($0,4,4); if (a > 0) printf "%d,%d,%f\n",a,b,20*log10(b/a) $a >> $OUTPUTFILE; }Mára szerintem ennyi, holnap megpróbálok összehozni egy ciklust ehhez. Van valami opció a kimenet tároló fájl felülírására, vagy töröljem minden alkalommal a program elején és csináljak újat?
-
CPT.Pirk
Jómunkásember
válasz
bambano #1003 üzenetére
Jah oké.
A fájlon belül próbáltam ugyanezt, de ott meg ha van pont a fájlnévben, akkor syntax errort dob. Mikor leírtam külön az output fájlt egy változóba, majd $output néven próbáltam használni, az sem volt jó. Valamint le kellene korlátozni a kimenetet.
Olyanra gondoltam, hogy kellene egy fix "számú" ciklus, amiben csak 2 értéket olvas be, oszt, logaritmust számol, majd pedig kiírja az eredményeket és ezt kezdi előről, a megadott elemszámig. Egy egyszerű for ciklus vagy while megteszi. (a log mellé majd egy freki értéket is oda szeretnék írni, de ez egyszerű lesz, csak a ciklus száma alapján fog oda kerülni - megnézem majd, hogy ez a 2 oszlopos értéksor megoldás megfelel-e a gnuplot elvárásainak)
A lemaradó nullákat nem tudom hogyan vizsgáljam, a cat-al nézve mindig minden érték jó. Ha az od -An -t x1 -el nézem, akkor is. Pont az jön be, amit elküd az fpga-m. (csomószor újranéztem ezekkel, nem volt hiba egyszer sem)
-
CPT.Pirk
Jómunkásember
válasz
bambano #1001 üzenetére
Utánanézek majd, de nem egyszerű megtalálni a problémát, mert nem jelentkezik mindig. Amikor igen, akkor 1-2 számjeggyel kevesebb a 2. szám, vagyis 1234 helyett 234 vagy 34 lesz. Közben az 1. szám meg jó, amit nem teljesen értek, mert 1 összefüggő kód a teljes uart kommunikáció fpga-n.
A kimenet fájlba küldésére van valami ötleted?
Új hozzászólás Aktív témák
- Windows 10/11 Home/Pro , Office 2024 kulcsok
- Sea of Thieves Premium Edition és Egyéb Játékkulcsok.
- Számlás!Steam,EA,Epic és egyébb játékok Pc-re vagy XBox!
- Windows 10 11 Pro Office 19 21 Pro Plus Retail kulcs 1 PC Mac AKCIÓ! Automatikus 0-24
- Adobe Előfizetések - Adobe Creative Cloud All Apps - 12 Hónap - NYÁRI AKCIÓ!
- ÁRGARANCIA!Épített KomPhone i9 14900KF 32/64GB RAM RX 9070 XT 16GB GAMER PC termékbeszámítással
- ÁRGARANCIA!Épített KomPhone i5 12400F 16/32/64GB RAM RTX 4060 Ti 8GB GAMER PC termékbeszámítással
- Telefon felvásárlás!! iPhone 16/iPhone 16 Plus/iPhone 16 Pro/iPhone 16 Pro Max
- Telefon felvásárlás!! iPhone X/iPhone Xs/iPhone XR/iPhone Xs Max
- ÁRGARANCIA!Épített KomPhone Ryzen 5 7600X 32/64GB RAM RTX 5070 12GB GAMER PC termékbeszámítással
Állásajánlatok
Cég: PC Trade Systems Kft.
Város: Szeged
Cég: CAMERA-PRO Hungary Kft
Város: Budapest