awk: invertire campi righe pari e stamparle con le dispari [messaggio #120890] |
ven, 23 settembre 2011 13:39 |
Lutrin Messaggi: 108 Registrato: dicembre 2010 |
Senior Member |
|
|
avendo una serie di dati in colonna:
valore 1 valore 2
valore 1 valore 2
valore 1 valore 2
ecc...
volevo invertirne i campi delle righe pari, stampandoli poi assieme alle
dispari
valore 1 valore 2
valore 2 valore 1
valore 1 valore 2
ecc...
con:
awk 'NR%2==0 { print $ $1 }'
effettivamente ci riesco, ma vengono stampate solo le righe pari e non le
righe dispari così come sono, più le righe pari coi campi invertiti
--
Puppy Linux wiki: http://dokupuppylinux.tk
Puppy Linux Forum: http://www.italianpuppy.org/
Windows me genuit, Ubuntu rapuere / tenet nunc Puppy Linux...
invito dropbox 2GB free - http://db.tt/Vc6IeN4
|
|
|
|
|
|
Re: awk: invertire campi righe pari e stamparle con le dispari [messaggio #121010 è una risposta a message #121009] |
ven, 23 settembre 2011 18:47 |
mallin.shetland Messaggi: 129 Registrato: novembre 2010 |
Senior Member |
|
|
Addì venerdì 23 settembre 2011 18:05 Lutrin scrisse:
> On Fri, 23 Sep 2011 16:50:46 +0200, mallin.shetland ci disse:
>
>> awk 'NR%2==0 { print $2, $1 }; NR%2==1 { print }'
>>
>> Con un po' di immaginazione però:
>>
>> awk '{ print ; getline ; print $2, $1 }'
> [...]
> grazie, non trovando il paragrafo giusto nel manuale (lungo) avevo
> escogitato
>
> awk 'NR % 2==1 { print $1, $2 } NR % 2==0 { print $2, $1 }'
>
> che anche se funziona è certo tautologico (e immagino non tanto corretto)
Non è nè scorretto nè tautologico ma è inefficiente poiché ripeti
due volte lo stesso test. Comunque se proprio non puoi resistere:
awk 'TEST=(NR%2){print$1,$2}!TEST{print$2,$1}'
|
|
|
Re: awk: invertire campi righe pari e stamparle con le dispari [messaggio #121117 è una risposta a message #121009] |
ven, 23 settembre 2011 21:15 |
Marco Messaggi: 226 Registrato: giugno 2007 |
Senior Member |
|
|
On Fri, 23 Sep 2011 16:05:26 GMT, Lutrin <elicona@olympo.it> wrote:
> On Fri, 23 Sep 2011 16:50:46 +0200, mallin.shetland ci disse:
>
> > awk 'NR%2==0 { print $2, $1 }; NR%2==1 { print }'
> >
> > Con un po' di immaginazione però:
> >
> > awk '{ print ; getline ; print $2, $1 }'
> [...]
> grazie, non trovando il paragrafo giusto nel manuale (lungo) avevo
> escogitato
>
> awk 'NR % 2==1 { print $1, $2 } NR % 2==0 { print $2, $1 }'
>
> che anche se funziona è certo tautologico (e immagino non tanto corretto)
Prova questo:
awk '{print $(2-NR%2), $(NR%2+1)}'
--
Cio' che si vede, e'.
|
|
|
|
|