[MEGOLDVA]awk magic

hello

keszul egy lista egy lekerdezesbol es levelet kell kuldenem az erintett embereknek.
a listam ami igy nez ki:


gecos: teszt jakab-joska
mail: teszt.jakab.joska@example.com

gecos: service User
mail: service_user@example.com

gecos: test ember
mail: ember.test@example.com

.....
eddig ezt hoztam ossze gAWK-val:

awk -F: '{ /^$/ getline x; $0 = ($0 x); {print $2;} }'

sajnos ez nem a legjobb mert ilyesmi kimenetet keszit:

test joska-pistamail
sytem User
sys_user@example.com
test embermail
test jakab
jakab.test@example.com
....

megj.: nincsenek ures sorok csak a ----code---- blok nem szereti a nem ures sorokat email cim utan :(.

a levelkuldesre talaltam a system parancsot https://www.gnu.org/software/gawk/manual/gawk.html#I_002fO-Functions
de azt nem tudom hogy miert jelenik meg mail nehany nev vegen es hogy hogyan is kene a system parancsot hasznalnom. probaltam valtozokba menteni az neveket es email cimeket de ahogy lattam az END szekcióban csak az utolso ertek jelenik meg, eseteben az utolso nev es mail cim.

tud valaki segiteni?

Hozzászólások

Kicsit át kellene rendezni azt a programot. ;)
Lássuk mi az input! Próbáld meg code nélkül ideírni!
Meg még azt is, hogy kb. mit szeretnél csinálni pl. egy userrel. Akár példával is. ;)

command....\n
gecos: keresztnev vezetekneve
mail: "keresztnev.vezeteknev@example.com"

gecos: system User
mail: "system_user@example.internal"

gecos: keresztneve vezetekneve-vezeketneve
mail: "keresztnev.vezetekneve.vezeteknev@example.com"

gecos: test joska
mail: "test.joska@example.io"

........

ebbol a listabol akarok en egy template segitsegevel leveleket kuldeni.

u.i.
nincs az emailcim korul macskakorom csak mashogy nem akarta nem email cimket kezelni

--
A legértékesebb idő a pillanat amelyben élsz.
https://sites.google.com/site/jupiter2005ster/

Ha a levél tartalma legyen a mailbodyfile-ban!

A program:

#!/bin/bash

awk -v Subject="Ez a subject" \
-v Body=mailbodyfile \
'BEGIN  {
                Nlm=length("gecos: ")+1
                Mlm=length("mail: ")+1
        }
/^gecos:/       {
                        Name=substr($0,Nlm)
                }
/^mail:/        {
                        Mail=substr($0,Mlm)

                }
/^$/    {
                Command=sprintf("mail -s \"%s\" \"%s\"\\<%s\\> < %s",Subject,Name,Mail,Body)
                print Command
#                system(Command)
        }' < lista

Az eredmény:

mail -s "Ez a subject" "keresztnev vezetekneve"\<keresztnev.vezeteknev@example.com\> < mailbodyfile
mail -s "Ez a subject" "system User"\<system_user@example.internal\> < mailbodyfile
mail -s "Ez a subject" "keresztneve vezetekneve-vezeketneve"\<keresztnev.vezetekneve.vezeteknev@example.com\> < mailbodyfile
mail -s "Ez a subject" "test joska"\<test.joska@example.io\> < mailbodyfile

Ha tetszik, akkor kiveheted a # jelet a system elől és mehet élesben.