Erre tessék: batch programozás
Jester
Erre tessék: batch programozás
Jester
Na most melyik ami a legjobb? Jester első megoldása végül is? Most valamiért nem lett jó, nem írta felül a régi grib fájlt, és megcsinálta tegnapiból. A letöltésbe még nem tettem bele az ellenőrzést.
[ Szerkesztve ]
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
Ja persze hogy nem lett jó , a systemd ütemezés bukott el. Le se töltötte a gribet..
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
Jester01 írta nekem pár napja ezt a fájl ellenőrzést scriptet.
while true
do
size=$(stat -c39845888 \%s ARPEGE_SP1_72H.grib2)
if [ $size -lt -o $size -gt 45088768 ]
then
# hiba, varj 5 percet
sleep 5m
# probald ujra
continue
fi
#csinald meg amit kell
...
# kész nem kell újra
exit 0
done
Na és az lenne a kérdésem hogy a méret ellenőrzésnél meglehetne e adni több fájl nevet, és ha igen hogyan? Mert többet szeretnék letölteni és több fájlt kellene ellenőrizni.
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
Ez megoldva.
Egymás után beraktam ugyanezt többi fájlok nevével. És jó.
De lenne egy másik dolog.
Ezt hogy kellene kijavítani h működjön?
#!/bin/sh
while true
do
size=$(stat -c \%s ARPEGE_SP1_12H.grib2)
size=$(stat -c \%s ARPEGE_SP1_24H.grib2)
if [ $size -lt 38797312 -o $size -gt 45088768 ]
then
# hiba, varj 5 percet
sleep 5m
# probald ujra
continue
fi
python /home/oliver/Magics_PCP_T_script/arpegepcpmslvhu_00_12.py
python /home/oliver/Magics_PCP_T_script/arpegepcpmslvhu_13_24.py
SZERVER='x'
FELHASZNALO='x'
JELSZO='x'
ftp -n -v $SZERVER << EOF
ascii
user $FELHASZNALO $JELSZO
prompt
cd ARPEGE
bin
send ARPEGEPCP06.png
send ARPEGEPCP12.png
send ARPEGEPCP18.png
send ARPEGEPCP24.png
EOF
while true
do
size=$(stat -c \%s ARPEGE_SP1_36H.grib2)
size=$(stat -c \%s ARPEGE_SP1_48H.grib2)
if [ $size -lt 38797312 -o $size -gt 45088768 ]
then
# hiba, varj 5 percet
sleep 5m
# probald ujra
continue
fi
python /home/oliver/Magics_PCP_T_script/arpegepcpmslvhu_25_36.py
python /home/oliver/Magics_PCP_T_script/arpegepcpmslvhu_37_48.py
SZERVER='x'
FELHASZNALO='x'
JELSZO='x'
ftp -n -v $SZERVER << EOF
ascii
user $FELHASZNALO $JELSZO
prompt
cd ARPEGE
bin
send ARPEGEPCP30.png
send ARPEGEPCP36.png
send ARPEGEPCP42.png
send ARPEGEPCP48.png
EOF
while true
do
size=$(stat -c \%s ARPEGE_SP1_60H.grib2)
size=$(stat -c \%s ARPEGE_SP1_72H.grib2)
if [ $size -lt 38797312 -o $size -gt 45088768 ]
then
# hiba, varj 5 percet
sleep 5m
# probald ujra
continue
fi
python /home/oliver/Magics_PCP_T_script/arpegepcpmslvhu_49_60.py
python /home/oliver/Magics_PCP_T_script/arpegepcpmslvhu_61_72.py
SZERVER='x'
FELHASZNALO='x'
JELSZO='x'
ftp -n -v $SZERVER << EOF
ascii
user $FELHASZNALO $JELSZO
prompt
cd ARPEGE
bin
send ARPEGEPCP54.png
send ARPEGEPCP60.png
send ARPEGEPCP66.png
send ARPEGEPCP72.png
exit
EOF
Ezt a hibaüzenetet kapom így.
/Run_model3.sh: 120: ./Run_model3.sh: Syntax error: end of file unexpected (expecting "done")
Ha kiszedem az EOF okat a feltöltés végéről akkor lefut a script de nem jó, mert invalid commandokat ir a többi python script futtatására.
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
A while-ok végén kimaradtak a done-ok, azt reklamálja.
A formázási lehetőség között van olyan, hogy "Programkód", kód beírásakor használd azt, mert az megőrzi a formázást meg a speciális karaktereket (szögletes zárójelek, meg zárójel elé tett kettőspontból sem lesz smiley).
[ Szerkesztve ]
DRM is theft
Közben megoldódott done , + exit helyett break. Done + exittel mintha nem működött volna úgy emlékszem.
De a több fájlos ellenőrzés még se működik.
Jók a méretek, és mégis újra kezdi a letöltést.
Ez lenne az.
#!/bin/sh
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=00H12H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_12H.grib2
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=13H24H&referencetime=$(date +"%Y-%m-%d")T06:00:00Z" -O ARPEGE_SP1_24H.grib2
# új letöltés
sleep 6m
continue
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=25H36H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_36H.grib2
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=37H48H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_48H.grib2
# új letöltés
sleep 5m
continue
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=49H60H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_60H.grib2
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=61H72H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_72H.grib2
while true
do
size=$(stat -c \%s ARPEGE_SP1_12H.grib2 )
size=$(stat -c \%s ARPEGE_SP1_24H.grib2 )
size=$(stat -c \%s ARPEGE_SP1_36H.grib2 )
size=$(stat -c \%s ARPEGE_SP1_48H.grib2 )
size=$(stat -c \%s ARPEGE_SP1_60H.grib2 )
size=$(stat -c \%s ARPEGE_SP1_72H.grib2 )
if [ $size -lt 38797312-o $size -gt 45088768 ]
then
# hiba, varj 10 percet
sleep 5m
# probald ujra
continue
fi
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=00H12H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_12H.grib2
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=13H24H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_24H.grib2
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=25H36H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_36H.grib2
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=37H48H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_48H.grib2
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=49H60H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_60H.grib2
wget "http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=__xxx__&model=ARPEGE&grid=0.1&package=SP1&time=61H72H&referencetime=$(date +"%Y-%m-%d")T12:00:00Z" -O ARPEGE_SP1_72H.grib2
exit 0
done
[ Módosította: dabadab ]
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
Aha, ez így nagyon nem jó Az alapvető hiba az, hogy a size változó függvényét simán felülírod anélkül, hogy az előző értékét vizsgálnád, aztán ha jó, akkor újra azonnal letöltöd, ha meg nem, akkor vársz és újra megnézed (az azóta nyilván változatlan file méretet )
Megcsináltam belőle egy normális változatot (a tokent írd bele vissza, azt töröltem az eddigi hozzászólásaidból is, mert az szerintem nem publikus információ):
szerk: észrevettem benne egy kis hibát, javítottam
#!/bin/bash
# access token
TOKEN="__5yLVTdr-sGeHoPitnFc7TZ6MhBcJxuSsoZp6y0leVHU__"
# file size min and max values - if the file's size falls outside of this range it is considered faulty
MIN_SIZE="38797312"
MAX_SIZE="45088768"
# time range - how many hour's data a single file contains
RANGE=12
function download_file()
{
# end time
TO="$1"
# start time - it is calculated a little oddly
FROM=$((${TO}-${RANGE}))
if [ $FROM -gt 0 ] ; then
FROM=$(($FROM+1))
fi
# add leading zeroes if needed
FROM="$(printf "%02d" "${FROM}")"
RANGE="$(printf "%02d" "${RANGE}")"
# url of the data
URL="http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=${TOKEN}&model=ARPEGE&grid=0.1&package=SP1&time=${FROM}H${TO}H&referencetime=$(date +'%Y-%m-%d')T${RANGE}:00:00Z"
# output file name
OUT_FILE="ARPEGE_SP1_${TO}H.grib2"
while true ; do
# get the file
wget "${URL}" -O "${OUT_FILE}"
# check the filesize
size=$(stat -c \%s "${OUT_FILE}" )
if [ $size -ge "${MIN_SIZE}" -a $size -le "${MAX_SIZE}" ] ; then
# size is OK, leave loop
break
else
# something went wrong, wait a little and retry
sleep 5m
fi
done
}
for TO in 12 24 36 48 60 72 ; do
download_file "${TO}"
done
[ Szerkesztve ]
DRM is theft
Nincs semmi gond a tokennel, mert publikus mindenki számára a letöltés. Úgyhogy az első sor törölhető akkor ugye? Meg amúgy se tudnának semmit se kezdeni a grib2 fájlokkal.
Ezt hogy érted hogy size változó értékét felül írom? Mivel? Amúgy nem így akartam megoldani, hanem úgy hogy szétbontom az összes fájl ellenőrzést, és berakom a letöltések után, nem mint most hogy a végén ellenőrzi az egészet csak.
Nem működik a letöltés. Csak egy HTML fájl töltődik le a gribek helyett. Meg ez hogy van beállítva? Hogy egyszerre töltse le az összes fájlt? Mert úgy nem lehet, vagyis lehet, de én fokozatosan akarom, mivel nem egyszerre frissülnek a szerveren a fájlok, hanem fokozatosan.
[ Szerkesztve ]
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
"Úgyhogy az első sor törölhető akkor ugye?"
Nem, ott meg kell adni a tokent, mert anélkül a jelek szerint nem megy, azért kapsz html file-t. Akkor azt visszarakom.
"Ezt hogy érted hogy size változó értékét felül írom? Mivel?"
A következő file méretével, amikor ott van egymás után sokszor a "size=" kezdetű sor, akkor minden sorban új értéket adsz a size-nak és csak a legutolsód ellenőrzöd.
"Amúgy nem így akartam megoldani, hanem úgy hogy szétbontom az összes fájl ellenőrzést, és berakom a letöltések után, nem mint most hogy a végén ellenőrzi az egészet csak."
Ami scriptet írtam, az így van, minden egyes file-t a letöltése után vizsgál meg, nem pedig egyben a végén.
"Meg ez hogy van beállítva? Hogy egyszerre töltse le az összes fájlt? Mert úgy nem lehet, vagyis lehet, de én fokozatosan akarom, mivel nem egyszerre frissülnek a szerveren a fájlok, hanem fokozatosan."
Vagyis várni akarsz az egyes file-ok letöltése után? Ha erről van szó, akkor azt a külső ciklusban gond nélkül megteheted:
for TO in 12 24 36 48 60 72 ; do
download_file "${TO}"
done
helyett az kell, hogy (ha pl. 10 percet akarsz várni):
for TO in 12 24 36 48 60 72 ; do
download_file "${TO}"
sleep 10m
done
[ Szerkesztve ]
DRM is theft
Értem. Köszi. De a letöltés most se akar jó lenni valamiért. Most is HTML fájl töltődik.
#!/bin/bash
# access token
TOKEN="__5yLVTdr-sGeHoPitnFc7TZ6MhBcJxuSsoZp6y0leVHU__"
# file size min and max values - if the file's size falls outside of this range it is considered faulty
MIN_SIZE="38797312"
MAX_SIZE="45088768"
# time range - how many hour's data a single file contains
RANGE=12
function download_file()
{
# end time
TO="$1"
# start time - it is calculated a little oddly
FROM=$((${TO}-${RANGE}))
if [ $FROM -gt 0 ] ; then
FROM=$(($FROM+1))
fi
# add leading zeroes if needed
FROM="$(printf "%02d" "${FROM}")"
RANGE="$(printf "%02d" "${RANGE}")"
# url of the data
URL="http://dcpc-nwp.meteo.fr/services/PS_GetCache_DCPCPreviNum?token=${__5yLVTdr-sGeHoPitnFc7TZ6MhBcJxuSsoZp6y0leVHU__}&model=ARPEGE&grid=0.1&package=SP1&time=${FROM}H${TO}H&referencetime=$(date +'%Y-%m-%d')T${RANGE}:00:00Z"
# output file name
OUT_FILE="ARPEGE_SP1_${TO}H.grib2"
while true ; do
# get the file
wget "${URL}" -O "${OUT_FILE}"
# check the filesize
size=$(stat -c \%s "${OUT_FILE}" )
if [ $size -ge "${MIN_SIZE}" -a $size -le "${MAX_SIZE}" ] ; then
# size is OK, leave loop
break
else
# something went wrong, wait a little and retry
sleep 5m
fi
done
}
for TO in 12 24 36 48 60 72 ; do
download_file "${TO}"
sleep 5m
done
[ Szerkesztve ]
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
Ja megvan működik, az én hibám volt, a linkben is beírtam a tokent, közben meg nem kellett volna. Köszi szépen.
[ Szerkesztve ]
LG Velvet 5G Android 11 - Windows 10 Pro x64 & Debian 11 Bullseye - WoWS unsinkable_sam_
Google keresési javaslatokhoz hasonlót meg lehetne valósítani?
Mondjuk egy fájl soraiban akarunk keresni, vagy egy mappa fájljaiban.
awk, grep, ilyesmikkel megoldható.
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
nagyszerű
Izé, lehet, hogy félreértettem. Keresési találatokra gondoltam, hogy a talált kulcsszavak esetén a kulcsszó környezetében írjon még ki mondjuk 1-2 sort.
Ha arra gondolsz, hogy elkezdesz gépelni valamit és közben dob fel találatokat és minden billentyű leütésnél frissül, azt passzolom.
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
igen az utóbbira gondoltam
Nyilván lehet, de azért ez eléggé pontatlan specifikáció.
Jester
Akkor javítok rajta.
Van kb 600 kisebb program. Amelyekből el kell indítanom az egyiket.
Az elképzelés az lenne hogy ha leütök egy betűt akkor az olyan betűvel kezdődő fájlok kerüljenek kilistázásra. Max 10 darab. Ha még egy betűt betűt leütök akkor az előző két betűvel kezdődő fájlok kerüljenek kilistázásra ugyan azon a helyen ahol az előző találatok. És így tovább.
Ha fájlok helyett egy fájl soraival is működik a dolog az még jobb.
[ Szerkesztve ]
bash+python kombóval van ilyesmi: pmenu
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
köszönöm szerintem tökéletes lesz
Sziasztok, egy unix shell reguláris kifejezésre lenne szükségem, de nem tudom összehozni :/
Egy csomó mindent próbáltam amiket nem fogok belinkelni, de ezt szeretném:
^(backend)*(.js)$
Tehát "backend" -el kezdődjön és ".js"-re végződjön. Nem sikerül összehozni :/
Edit: na mire leírtam úgy tűnik, hogy ez működik: '^(backend).*(.js)$
Üdv
[ Szerkesztve ]
Akkor egy kicsit más fajta kérdés:
Ez a két sor mit csinál
OUTPUT=$(git diff --name-only HEAD | grep -E '^(backend).*(.js)$')
a=("${(f)OUTPUT}")
Az első sor az tiszta, de a második sor mit csinál az OUTPUT-al?
backend*.js
vagy
^backend*.js$
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
ez nem jo, csak a backend.js es backen.js-re illeszkedik (pontosabba meg sokmindenre, pl. backenxjs)
a *ele kell a pont:
^backend.*\.js$
unix shell reguláris kifejezést keresett, nem szabvány regexpet.
tehát jó.
bambano@bruti:/tmp/3$ touch back.js
bambano@bruti:/tmp/3$ touch backe.js
bambano@bruti:/tmp/3$ touch backen.js
bambano@bruti:/tmp/3$ touch backend.js
bambano@bruti:/tmp/3$ touch backend-.js
bambano@bruti:/tmp/3$ touch backend-3.js
bambano@bruti:/tmp/3$ touch backend-3.js
bambano@bruti:/tmp/3$ touch backend-34.js
bambano@bruti:/tmp/3$ touch backend34.js
bambano@bruti:/tmp/3$ touch backend345.js
bambano@bruti:/tmp/3$ ls -l backend*.js
-rw-r--r-- 1 bambano bambano 0 ápr 13 13:41 backend345.js
-rw-r--r-- 1 bambano bambano 0 ápr 13 13:41 backend-34.js
-rw-r--r-- 1 bambano bambano 0 ápr 13 13:41 backend34.js
-rw-r--r-- 1 bambano bambano 0 ápr 13 13:41 backend-3.js
-rw-r--r-- 1 bambano bambano 0 ápr 13 13:41 backend-.js
-rw-r--r-- 1 bambano bambano 0 ápr 13 13:41 backend.js
a második kérdésében a grep -E-t kérdezte, az nem unix shell regexp, hanem extended szabvány regexp.
tehát az első kérdésére az én válaszom helyes. hogy a második kérdéséből az derült ki, hogy nem is ezt akarta kérdezni, az mvp
Egy átlagos héten négy hétfő és egy péntek van (C) Diabolis
nincs olyan hogy 'unix shell regexp', amire te annak hivsz az sima glob expression
egyebkent az altala adott peldabol is egyertelmu volt hogy regexpet keres nem pedig shell filemaskot
MOD: amennyiben utobbi csak utolag kerult bele a valaszom utan, akkor a fenti termeszetesen targytalan
[ Szerkesztve ]
Hali srácok egy paranccsal lenne problémám vagyis egy feladattal tudnátok segíteni?
Adott a nevek.txt állomány. Mely paranccsal tudná a fájlban található magyarosan írt neveket /nagybetűvel kezdődő utána kisbetű majd ismét/ angolosan megjeleníteni /felcserélni az első és a második nevet/?
Próbálkoztam de enm jön össze idáig jutottam:
cat nevek.txt | egrep '[A-Z][a-z]+' | awk '{print $2 $1}'
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
Felesleges a cat és a grep. awk érti a regexet és tud bementeni fájlt olvasni.
Valami ilyesmi, de a konkrét fájltól is függ.
awk '/[a-zA-Z]+/{print $2" "$1}' nevek.txt
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
Köszönöm, esetleg kis magyarázatot adnál?
Főleg ez a része nem tiszta:
/[a-zA-Z]+/
de az sem hogy $2 után $1 elé miért kell "-jel
+Ha már így benne vagyunk lenne még egy feladat:
Hogyan tudná a valami.txt fájl tartalmát megjeleníteni awk segítségével úgy hogy minden sor elejére írja ki a
sorok és az aktuális sorban szereplő szavak számát is?
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
Te írtad a regexet, én csak beraktam awk-ba. Ha csak simán nevek vannak a fájlban felsorolva egymás alá, akkor nem is kell. Például:
$ cat nevek.txt
Kiss Béla
Nagy Józsi
Takács Endre
$ awk '{print $2" "$1}' nevek.txt
Béla Kiss
Józsi Nagy
Endre Takács
A " " az egy szóköz, különben ez lesz:
awk '{print $2 $1}' nevek.txt
BélaKiss
JózsiNagy
EndreTakács
szerk: a házi feladat többi rész rád vár. Sok példa van neten, meg tutorialok is, nulláról nem írja meg helyetted senki, főleg konkrét példa/feladat nélkül.
[ Szerkesztve ]
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
jaj tényleg a szóköz
egyébként rendben de és ha nem csak az van benne?
Pl itt ahogy látom nem is jó: első kettő elmegy "névnek" de harmadik már nem mivel a második szó nem nagybetűvel kezdődik mégis kiírta
j@ubuntu:~/Documents$ cat nevek.txt
Kis András
Asdfs Psdfsd
SDFsdf sdfsdfsdf
j@ubuntu:~/Documents$ awk '/[a-zA-Z]+/{print $2" "$1}' nevek.txt
András Kis
Psdfsd Asdfs
sdfsdfsdf SDFsdf
* Jó pár feladat mögöttem van már de ezek nem mentek azért írtam hátha tudtok segíteni
[ Szerkesztve ]
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
Valami ilyesmi esetleg:
awk '/^[A-Z]+/{print $2" "$1}'
szerk: és a $2 és $1 ugye két mezőt printel, ha valakinek 3 részből áll a neve (pl. Kiss Elemér Géza), akkor az bukta, erre figyelj majd.
[ Szerkesztve ]
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
Sajnos ez sem nyert, de köszönöm próbálkozom még.
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
awk '/^[A-Z][a-z]+ [A-Z][a-z]+/{print "Sorszám: "NR" szavak száma: "NF" "$2" "$1}'
Persze az még mindig kérdéses mi van a 3 nevűekkel. ott a 3.-kat elveszted vagy simán kiprinteled, a 3.-kat is.
Idézőjel azért kell, hogy a print tudja hogy nem változót akarsz használni, hanem egyszerű stringet.
ahogy látszik a mintában vannak beépített változók awk-ban, azokat használhatod
googleben hamar megtalálhatod őket.[link]
Vagy esetleg még a filed numberre is szűrhetsz
awk 'NF>2&&NF<3&&/^[A-Z]/{print ....}'
mondjuk persze mindig lehet finomítani.
[ Szerkesztve ]
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
jah most nézem akkora ellentmondás van a field numberes szűrésemben...
nagyobb 2-nél és kisebb 3-nál... mindegy a lényeget gondolom értetted.
[ Szerkesztve ]
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
Igen koszonom :-)
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
(#2139) beloadjoker válasza beloadjoker (#2138) üzenetére
Hali srácok ezt szeretném megcsinálni:
Elírás történt egy fájlban. Hogyan cserélné le a 19-cel kezdődő évszámokat 20-val kezdődőre. (évszám 4 karakter!):
pl.:1908 --> 2008
sed 's/\(19\)\([0-9][0-9]\)/20\2/g' a
Az a bajom hogy nem csak a 4 számból állókat írja át szóval szerintem be kéne szúrni valahova ezt: {4} de nem sikerül, tudnátok segíteni?
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
$ cat evszamok.txt
1908
1922
1938
1522
2012
$ awk '/^19[0-9]{2}$/{sub("19","20");print}' evszamok.txt
2008
2022
2038
Biztos van egyszerűbb megoldás is, de nekem most még korán van, elsőre ez jött.
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."
Ez attól függ mi a környezet, az évszámok utáni részt is rakd be a \2-be. szóköz, end line, field separator, stb az 19 elé meg szintén berakhatod ezeket.
Viszont én a te megoldásodon annyit javítanék, hogy a 19 után nem engedném hogy 0-9 legyen mert akkor az 1993-at is át fogja írni, ami valószínű nem elírás... Ezért én maximum [0-1][0-9]-et engednék meg. Még ígyis 2019-ig fogja változtatni
Szerk: azért elég furcsa egy adatbázis ez... Semmi rendszeresség...
[ Szerkesztve ]
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
Köszi bár nem teljesen jó:
j@ubuntu:~$ cat a
19 1923 132323 192323
1982
Barbara Jozsi Bela bela jozsi barbara
1999 AsdfgsdfgZ Asfgsdfgsd1Z
Asd asd bbbb
ccccc
cccccc
j@ubuntu:~$ awk '/^19[0-9]{2}$/{sub("19","20");print}' a
2082
de már sejtem hol a gond
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
Még most sem sikerült, leírnád hogy kellene?
Túl nagy évszám nem gond tanár adja a feladatot persze ha kapok ilyet zh-n, nem írta hogy nem lehet nagyobb az évszám valamennyinél
*igen csak én csináltam gyors nyilván hogy keressem a megoldásban a hibát
[ Szerkesztve ]
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
Sziasztok,
Lehet, hogy ez a kérdés nem ide tartozik de hátha...
Hogyan lehet egy parancs lefutásakor kiíratni a dátumot a terminálban?
Előre is köszi!
Romani ite domum.
Hát lehet hogy nem a legjobb megoldás de:
date && és_ide_a_parancs_amit_akarsz
/így az elején lesz persze ha fordítva csinálod akkor a végére írja ki a dátumot/
[ Szerkesztve ]
Oneplus One 64gb S. Black + nokia N900 + Xperia Mini + Lenovo y510p i7 SLI 16Gb 256 ssd 1tb ext. hdd + Lenovo x200 + Nexus 7 grouper 16gb + Nexus 7 flo 32gb
Hát ez egy összetetteb ha így mindenre gondolni kell...
Első körben vegyük azokat amik a sor közepén helyezkednek el, 4 szám egymás után, előtte utána bármi ami nem szám, az már évszám
sed "s/\([^0-9]\)\(19\)\([0-9]\{2\}[^0-9]\)/\120\3/g" /evszam.txt
Előtte nincs semmi (sorkezdés) utána van bármi ami nem szám.
sed "s/^\(19\)\([0-9]\{2\}[^0-9]\)/20\2/" /evszam.txt
Előtte bármi ami nem szám, utána semmi (sorvég).
sed "s/\([^0-9]\)\(19\)\([0-9]\{2\}\)$/\120\3/" /evszam.txt
előtte utána semmi (csak az évszám van).
sed "s/^\(19\)\([0-9]\{2\}\)$/20\2/" /evszam.txt
Persze ezt besűrítheted egy nagy átláthatatlan parancsba.
sed "s/^\(19\)\([0-9]\{2\}\)$/20\2/;s/\([^0-9]\)\(19\)\([0-9]\{2\}\)$/\120\3/;s/^\(19\)\([0-9]\{2\}[^0-9]\)/20\2/;s/\([^0-9]\)\(19\)\([0-9]\{2\}[^0-9]\)/\120\3/g" /evszam.txt
Minden eshetőségre könnyebbet nem találtam. Persze a szövegelválasztókat cserélheted bármi másra. [^0-9] hogy ne ugorjon bármire, ami nem szám. pl nem szám és nem betű. [^0-9a-zA-Z] vagy csak szóköz és vessző [ ,]
Az &&-el óvatosan, ha mindenképp le kell futni, mert ha így adod ki, akkor csak akkor fog lefutni, ha az első parancs lefutott és a return értéke 0.
vagyis ha mondjuk grep nem talál semmit akkor nem fog végrehajtódni a && után jövő parancs. Ha már 1 sorba kell tömöríteni használjuk a ";"-et parancsok elválasztásához.
[ Szerkesztve ]
LEDE - R3G/DIR860l -> https://tinyurl.hu/Ntkb/
Köszi!
Romani ite domum.
Szia!
Én ezt tenném:
cat a | sed 's/\b19\([0-9]\{2\}\)\b/20\1/g'
Alex
Felesleges a cat-ból pipe-olni.
„A feketébe öltözött ember a sivatagon át menekült, a harcos pedig követte."