Sziasztok!
Szeretnék hírlevelet küldeni mutt segítségével, ami működik is, beállítottam gmail accountomra, így nem kell smtp szervert létrehoznom.
Viszont van egy rakás címzettem ami egy text fájlban van lementve. Egy sor így néz ki:"néve-mail"
Hogy tudom a fájlból kiszedni soronként a nevet, és külön az e-mail címet?
A levél törzse szintén egy txt fájlban van lementve. Abban viszont szeretném kicserérni a Tisztelt ! szövegrészt az emberünk nevére. majd egyesével el tudom küldeni a levelet.
Szeretném kérni a segítségeteket, hogy honnan is lehetne eindulni.
- 6923 megtekintés
Hozzászólások
awk, perl stb. pl.
#!/bin/bash
cat cimlista.txt | while read SOR; do
NEV=`echo $SOR | awk -F"\t" '{print $1;}'`
CIM=`echo $SOR | awk -F"\t" '{print $2;}'`
SZOVEG=$(cat << 'EOF'
Tisztelt ${NEV}!
asdf asdf asdf
jklé jklé jklé
foo
bar
baz
EOF
)
mutt -s "Hirlevel" "$CIM" < "$SZOVEG"
done
HTH
--
A gyors gondolat többet ér, mint a gyors mozdulat.
- A hozzászóláshoz be kell jelentkezni
Egy sor így néz ki:"néve-mail" -> akkor sehogy
- A hozzászóláshoz be kell jelentkezni
Pl:
Miki miki@na.hu
Julcsi julcsika@szek.com
(a szóközött helyett tabulátor van)
- A hozzászóláshoz be kell jelentkezni
hát így ugye mindjárt más :)
- A hozzászóláshoz be kell jelentkezni
Helló
Én annak a híve vagyok, hogy amit az ember saját maga talál ki, az segít, hogy a jövőben hasonló helyzetben önállóan is meg tudja oldani.
Néhány ötletet viszont szívesen adok, ami alapján el tudsz indulni.
Shell scriptben:
Ha szöveges fájlt soronként kell feldolgozni, akkor:
for i in `cat fájl`;do
...
done
Ha a sorban a - karaktert figyelve kell elválasztani a szövegrészeket akkor awk -F \- '{print $1}'
Remélem ez segített
Üdv
Sempi
PHPAdmin - Ha a táblázatkezelő már nem elég...
- A hozzászóláshoz be kell jelentkezni
értem, akkor awk-val ki tudok iratni egy szövegrészt változóba, amit a script tud használni.
(na mégegyszer a szintaxis):
név tabulátor e-mail cím
név tabulátor e-mail cím
név tabulátor e-mail cím
Köszi!
- A hozzászóláshoz be kell jelentkezni
ha tabulátor az elválasztó, akkor cut parancsot nézd meg. fentebb leírták a megoldást (f0xhu), én csupán az awk parancsos részt erre cserélném:
.. | cut -f1
.. | cut -f2
- A hozzászóláshoz be kell jelentkezni
Mar miert kene kulso programokat hivogatni bash-bol, hogy fel tudjunk szabdalni egy stringet bizonyos karakterek menten?
$IFS ...
- A hozzászóláshoz be kell jelentkezni
Azert leirhatnad, hgy az IFS-sel te hogy gondolod, mert szerintem az emberek zome nem jon ra pipe (tehat uj processz inditas) nelkuli megoldasra:
$ a=almaXkorteXnarancsXszilva
$ oifs="$IFS" IFS=X b=( $a ) IFS="$oifs" ; unset oifs
$ set | grep -e '^a=' -e '^b='
a=almaXkorteXszilvaXnarancs
b=([0]="alma" [1]="korte" [2]="szilva" [3]="narancs")
$
(Termeszetesen ha nem bash, hanem ksh - ahol mas a tombvaltozok kezelese -, ott a
b=( $a )
helyett
; set -A b $a ;
formaban kell megcsinalni.)
(Szerk: a ksh-s reszbol kimaradt egy fontos pontosvesszo.)
- A hozzászóláshoz be kell jelentkezni
"for i in `cat fájl`;do"
Újabb hupszakértés.
- A hozzászóláshoz be kell jelentkezni
ebben biztos voltam.
Volt egy kérdés, volt egy válasz, ami alapján el tud indulni az emberünk.
Aztán jön a szokásos, jönnek az okos beszólások, ami senkinek sem kell. Tudom, most jön az, hogy én is ilyet írok. Sajnos manapság a HUP csak erről szól. Mindenki akkora szakértő, hogy már csak fikázni tud....
- A hozzászóláshoz be kell jelentkezni
De félrevezető, rossz útmutatást adni, az helyes :) Tipikus.
- A hozzászóláshoz be kell jelentkezni
Srácok szeretném megköszönni mindenkinek a segítséget elindultam az AWK-s úton, nyálazom a tutorialokat.
Sikerül jó lekérdezéseket gyártani vele, ha megleszek a megoldással majd beszúrom hátha valakinek kell majd.
Köszönöm mégegyszer mindenkinek!
- A hozzászóláshoz be kell jelentkezni
Itt az ok, miért nem annyira szerencsés: http://mywiki.wooledge.org/DontReadLinesWithFor
(megjegyzem, zsh alatt megpróbáltam, ott úgy működik, ahogy az ember elsőre elvárná)
Szerk.: bocs, nem tudom, hogy keveredtem egy három éves topikba :(
- A hozzászóláshoz be kell jelentkezni
Sziasztok,
Írtam egy ciklust, ez a tartalma: (csak kiszed és egy kicsit rendezi a fájlok kinézetét) a célom az, hogy egy szabályos html oldal jöjjön létre majd a a végén, csak előtte ki kellene tisztítani a txt fájlt.
#!/bin/bash
for i in *.txt
do
if [ -f "$i" ]
then
iconv -f utf-16 -t utf-8 *.txt | sed 's/<\|>\||/ /g' | sed 's/^[[:space:]]*//; s/;[[:space:]]*/;/g' | sed 's/ [0-9]\{4\}//g'
fi
done
Tudnátok segíteni abban, hogy azt azt hogyan lehet elérni, hogy a mappa, ahol futtatom, jelenleg 6 db txt fájlt tartalmaz, a ciklus hozzon létre 6 db új fájlt a 6 eredeti nevével, csak fűzzön hozzá egy fájlnév_tmp.txt végződést azért, hogy legyen 6 ideiglenes fájlom, amivel tovább tudok majd lépni.
- A hozzászóláshoz be kell jelentkezni
for i in *.txt
do
if [ -f "$i" ]
then
iconv -f utf-16 -t utf-8 "$i" | sed 's/<\|>\||/ /g' | sed 's/^[[:space:]]*//; s/;[[:space:]]*/;/g' | sed 's/ [0-9]\{4\}//g' > "${i}_tmp.txt"
fi
done
--
A főnököm mindig megtartja amit ígér, ha pénzt ígér azt is!
- A hozzászóláshoz be kell jelentkezni
Köszönöm szépen!
Közben találtam egy másik megoldást is: ls *.txt | awk -F '.' '{print $1"_tmp."$2}'
de a tied egyszerűbb.
Viszont most meg előjött egy hiba, ami eddig nem volt:
"iconv: incomplete character or shift sequence at end of buffer"
A fájlokra ez a jellemző: Little-endian UTF-16 Unicode text, with very long lines, with CRLF, LF line terminators
Köszi!
- A hozzászóláshoz be kell jelentkezni
A sed "parancsokat" lehet egy sed-del is elintézni, ahogy középen is csináltad. Sőt, ha már úgyis fájlba írod, több sorba is le tudod írni:
iconv -f utf-16 -t utf-8 *.txt | sed 's/\<|>\||//g ; \
s/..... ; \
s/.....'
Így talán áttekinthetőbb :)
- A hozzászóláshoz be kell jelentkezni
Igen, áttekinthetőbb mindenképpen, köszi, nem tudtam, hogy így is lehet.
- A hozzászóláshoz be kell jelentkezni
Használd egészseggel :)
- A hozzászóláshoz be kell jelentkezni