Newsgroup: it.comp.os.linux.iniziare
Titolo: Mi faccio le PIPE

Ciao,
allora...ammettiamo che MIOPROGRAMMA generi un generico output 
multiline in console.
Di questo output voglio prelevare sezioni separate.
...esempio con due ipotetiche linee
Output di MIOPROGRAMMA
..etc
235 pippo     pluto  12345  oii lakksjdjd.zozzo
678 topolino  minnie 784396 lol s.dmkej
..etc
io voglio ottenere in un unico passaggio (senza utilizzare file
di appoggio) qualcosa tipo:
..etc
235 pluto  zozzo
678 minnie dmkej
..etc
per ottenere solo la prima colonna:
  mi basta un "cut -c ..." e va bene
 
per ottenere solo la seconda:
  colonna mi basta un'altro cut e va bene
per ottenere solo la terza colonna:
  utilizzo un "-f d. ..." per spezzare con il punto perche'
  non sono in presenza di colonne fisse
 
il problema e' che non riesco ad ottenere tutto l'output
descritto sopra rispettando queste le condizioni:
1) Non utilizzare nessun file d'appoggio
2) Fare tutto con un solo comando
poiche' gia' con il primo passaggio mi trovo a lavorare con una
linea gia' divisa e quindi priva delle altre colonne...
MIOPROGRAMMA | cut -c 1-3
Con quale sequenza risolvereste questo problema?
Grazie

 ..etc
awk --field-separator='. ' '{print $1 $3 $5}'
man awk per ulteriori info
Davide

 mioprogramma | awk '{ print $1\t$2\t$3 }'
Letto male. La terza colonna la puoi recuperare sempre usando AWK,
cambiando il field separator.
info awk
Ciao,
 Emmanuele.
-- 
Emmanuele Bassi (Zefram)           [ 
http://www.radiance.d2g.com/~zefram
 ]
GnuPG Key fingerprint = 4DD0 C90D 4070 F071 5738  08BD 8ECC DB8F A432 0FF4

 Con quale sequenza risolvereste questo problema?
Le prime tre colonne?
mioprogramma | awk '{ print $1\t$2\t$3 }'
Ciao,


 Ciao...

> Solo le PIPE ti potevi fare mio caro ROOT IN CUUL
...ChsNet invece di scrivere cazzate inutili per perdere tempo
   perche' non provi a risolvere ...MINCHIONE!!!!
...forse non mi sono spiegato bene...
alcune sono colonne fisse altre sono da dividere tramite ".".
Pero' ho creato un esempio che anche se inutile fa capire esattamente 
quello che intendo...cosi' potete provarlo sulla vostra macchina:
andate in una qualsiasi directory che non sia /etc
e date un "ls /etc/*.conf -l"
otteniamo una cosa del tipo:
-rw-r--r--    1 root     root         2880 May 14 21:13
/etc/devfsd.conf
-rw-r--r--    1 root     root         1756 May 29 03:06
/etc/gpm-root.conf
-rw-r--r--    1 root     root          966 May 29 03:06
/etc/gpm-syn.conf
-rw-r--r--    1 root     root         4763 May 29 03:06
/etc/gpm-twiddler.conf
-rw-r--r--    1 root     root           27 Jul  7  1994 /etc/host.conf
-rw-r--r--    1 root     root         2012 Apr  6 03:30
/etc/identd.conf
..etc
io da questo output voglio ottenere tre colonne:
1) colonna permessi
2) colonna data ultima modifica (completa) 
3) colonna nome file senza path e senza estensione
 
 tutto separato da uno spazio
 
 eccho l'output esatto che vorrei ottenere:
-rw-r--r-- May 14 21:13 devfsd
-rw-r--r-- May 29 03:06 gpm-root
-rw-r--r-- May 29 03:06 gpm-syn
-rw-r--r-- May 29 03:06 gpm-twiddler
-rw-r--r-- Jul 7 1994 host
-rw-r--r-- Apr 6 03:30 identd
...etc
Io al massimo arrivo ad ottenere:
-rw-r--r-- May 14 21:13
-rw-r--r-- May 29 03:06
-rw-r--r-- May 29 03:06
-rw-r--r-- May 29 03:06
-rw-r--r-- Jul 7 1994
-rw-r--r-- Apr 6 03:30
...etc
tramite  il comando:
  ls /etc/*.conf -l | awk --field-separator=' ' '{print $1" "$6" "$7"
"$8" "}'
Oppure ottengo i nomi dei file:
devfsd
gpm-root
gpm-syn
gpm-twiddler
host
identd
...etc
tramite  il comando:
   ls /etc/*.conf -l | cut -c 62-80 | awk --field-separator='.'
'{print $1}'
 
Ma non ottengo l'output completo visto sopra.
Ogni soluzione va bene, ma per quanto mi riguarda piu' e' compatta e
meglio e'...poi se qualcuno di voi riuscisse a fare tutto con una sola
istruzione e senza utilizzare file di appoggio ...potrei
commuovermi!!!
Grazie

Continuati a fare le PIPE maleducato.


 commuovermi!!!
... e` tempo di praticare la necromanzia con sed.
Ci sono riuscito (non dico mai di no a un sano esercizio di regexp!), il
problema e` che non e` compatta, e avrei preferito un sed solo. Comunque
sia, reggiti forte!
    ls -l /etc/* | sed "s/\([^ ]*\) *\([^ ]* *\)\{4\}\(.*\)/\1 \3/" |\
    sed "s-/etc/--" | sed "s/\.[^\.]*$//"
Non so se sia perfetta sempre, ma dovrebbe avvicinarsi abbastanza a cio`
che chiedevi. ;-)
-- 
  _      ___ ____
 | | /| / (_)_  / >>> aka Luciano Di Lucrezia
 | |/ |/ / / / /_   . Radiance BBS: 
http://www.radiance.d2g.com/
 |__/|__/_/ /___/   . Ban Micro$oft from Universities! Support Free Software.
 
Pane e GNUtella, la merenda del pinguino brufoloso. (R. Poggi)

che chiedevi. ;-)
...perfetta!!!!
Luciano Di Lucrezia ...un uomo un mito...momento di commozione!!!
Ciao e grazie ancora
Root in Cuul