Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
cut -d"ACAPO" -f2 [RISOLTO]
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Forum di discussione italiano
View previous topic :: View next topic  
Author Message
HoX
Guru
Guru


Joined: 11 Nov 2006
Posts: 385

PostPosted: Mon Jun 04, 2007 6:11 pm    Post subject: cut -d"ACAPO" -f2 [RISOLTO] Reply with quote

Devo usare il comando cut in uno script, ma il problema è che il carattere che devo usare come delimitatore è il carattere a_capo (\n).
Seguendo il man di cut dice di inserire semplicemente un a capo tipo

Code:
cut -d'
' -f2

che funziona benissimo da console, ma mi paralizza lo script e non si muove più...
avete suggerimenti su come fare?

per ora io ho trovato questo workaround
Code:
tr "\n" "°" | cut -d'°' -f2

ma se esistesse qualcosa di più pulito (e che non mi pregiudichi l'utilizzo di un carattere (in questo caso '°')) preferirei... consigli?


Last edited by HoX on Mon Jun 04, 2007 8:14 pm; edited 1 time in total
Back to top
View user's profile Send private message
Luca89
Advocate
Advocate


Joined: 27 Apr 2005
Posts: 2107
Location: Agrigento (Italy)

PostPosted: Mon Jun 04, 2007 7:44 pm    Post subject: Reply with quote

Prova così:
Code:
cut -d$'\n'

_________________
Running Fast!
Back to top
View user's profile Send private message
HoX
Guru
Guru


Joined: 11 Nov 2006
Posts: 385

PostPosted: Mon Jun 04, 2007 8:14 pm    Post subject: Reply with quote

Luca89 wrote:
Prova così:
Code:
cut -d$'\n'

Funziona... grazie mille!
Back to top
View user's profile Send private message
gutter
Bodhisattva
Bodhisattva


Joined: 13 Mar 2004
Posts: 7162
Location: Aarau, Aargau, Switzerland

PostPosted: Tue Jun 05, 2007 8:13 am    Post subject: Reply with quote

Moved from Forum italiano (Italian) to Forum di discussione italiano.
_________________
Registered as User #281564 and Machines #163761
Back to top
View user's profile Send private message
drizztbsd
Retired Dev
Retired Dev


Joined: 21 Nov 2004
Posts: 278
Location: Cesano Maderno

PostPosted: Tue Jun 05, 2007 8:25 am    Post subject: Reply with quote

????
non ha molto senso usare cut con \n imho (e considera che non è portable $'\n')
io di solito gioco di read
_________________
Gentoo/Alt lead
Gentoo/*BSD and Gentoo/FreeBSD deputy lead
Paludis contributor
Back to top
View user's profile Send private message
nick_spacca
l33t
l33t


Joined: 29 May 2004
Posts: 689
Location: Paris/France

PostPosted: Tue Jun 05, 2007 10:03 am    Post subject: Reply with quote

Drizzt Do` Urden wrote:
????
non ha molto senso usare cut con \n imho (e considera che non è portable $'\n')
io di solito gioco di read

Perché? questi tips interessano anche me, che spesso mi imbatto in cazzatine bash con cut (tipo anche con il tab '\t') ...potresti spiegarmi meglio cosa intendi?
_________________
I can resist anything but temptation.
(O. Wilde)
Back to top
View user's profile Send private message
drizztbsd
Retired Dev
Retired Dev


Joined: 21 Nov 2004
Posts: 278
Location: Cesano Maderno

PostPosted: Tue Jun 05, 2007 10:21 am    Post subject: Reply with quote

nick_spacca wrote:
Drizzt Do` Urden wrote:
????
non ha molto senso usare cut con \n imho (e considera che non è portable $'\n')
io di solito gioco di read

Perché? questi tips interessano anche me, che spesso mi imbatto in cazzatine bash con cut (tipo anche con il tab '\t') ...potresti spiegarmi meglio cosa intendi?


cut di default usa \t e va bene :P
$'' è una estensione di bash e non è POSIX compatibile (che ne so se ti serve usarlo con (d)ash o busybox sh)
se devi prendere la seconda riga di un file lo puoi fare in diversi modi POSIX compliant, quello consigliato è
Code:
head -n 2 $FILE | tail -n 1

_________________
Gentoo/Alt lead
Gentoo/*BSD and Gentoo/FreeBSD deputy lead
Paludis contributor
Back to top
View user's profile Send private message
mouser
Veteran
Veteran


Joined: 10 Aug 2004
Posts: 1419
Location: Milano

PostPosted: Wed Jun 06, 2007 7:52 am    Post subject: Reply with quote

Ma scusa, invece di usare cut -d"a_capo" o con il \t come ti consigliano, non è più comodo buttare tutto in una variabile (anche i \n) e fare un bel

Code:
echo -e $VARIABILE | while read LINEA; do
...
done


???

Ciriciao
mouser :wink:
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Wed Jun 06, 2007 10:47 am    Post subject: Reply with quote

se non ricordo male:

tail usa una fopen che scorre il file un blocco alla volta ed a parte il buffer non impegna altro mentre con la variabile carichi l'intero file nell'abiente e quindi consumi maggiori risorse ma dovrebbe essere leggermente più immediato visto che è tutto builtin.
Se sei certo che il peggio che ti capita sono una decina di righe di non più di un centinaio di caratteri e non rischi di avere molte istanze sarebbe preferibile anche per me ma se non è così perchè buttar via risorse o rischiare di esaurilrle?

Tanto per cambiare è questione di "dove, quando e come". Che poi lo scripting (ba)sh sia un esercizio di minimalismo per tradizione fa sempre brodo.

Un poco come il dilemma dell'usare tar -xf - | bzip o tar file ; bzip file per capirci.
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
Dr.Dran
l33t
l33t


Joined: 08 Oct 2004
Posts: 766
Location: Imola - Italy

PostPosted: Sun Jun 10, 2007 8:23 pm    Post subject: Reply with quote

Ehm... e scusate se modifichiamo provvisoriamente il valore della variabile ambiente IFS e facciamo un ciclo for?

Questo è un semplice esempio:

Code:
#!/bin/bash

IFS=$'\n'

for i in $(cat prova.txt); do
        echo $i;
done

#oppure senza modificare IFS
echo -e "\t"
#oppure senza modificare IFS

cat prova.txt | while read LINEA; do
        echo $LINEA;
done


il file prova.txt

Code:
Questa è una prova 1
Questa è una prova 2
Questa è una prova 3
Questa è una prova 4


L'output generato è:
Code:
 bash prova.sh
Questa è una prova 1
Questa è una prova 2
Questa è una prova 3
Questa è una prova 4

Questa è una prova 1
Questa è una prova 2
Questa è una prova 3


Mentre il primo ciclo assegna ad $i ogni stringa delimitata con '\n' il secondo suggerito giustamente da mouser mi esclude l'ultima poichè nel file non è inserito lo stesso carattere in coda all'ultima stringa. (N.B. è da notare poichè se è uno stream o un flusso che tu intercetti da chissadove non è detto che il file termini con il newline o altro)

@djinnZ
La tua considerazione su tail ed head è corretta, ma dovresti avere a che fare con uno file che conosci per dimensione, oppure dovresti inserire in un ciclo il comando che ha suggerito Drizzt Do` Urden.

Cheers

Franco
_________________
:: [Dr.Dran] Details ::
- Linux User # 286282
- IT FreeLance Consultant
- President of ImoLUG [Imola & Faenza Linux User Group]
Back to top
View user's profile Send private message
djinnZ
Advocate
Advocate


Joined: 02 Nov 2006
Posts: 4831
Location: somewhere in L.O.S.

PostPosted: Mon Jun 11, 2007 6:22 pm    Post subject: Reply with quote

Usando IFS il risultato è lo stesso, sempre usi una variabile.

In più anche read obbedisce ad IFS in bash.

Quanto alla dimensione se pensi di affrontare il parsing di un file di configurazione o di una lista di utenti (che per quanto relativamente enormi avranno sempre dimensioni accettabili) una soluzione vale l'altra.

Se invece devi lavorare su un log che può assumere facilmente dimensioni inumane la soluzione di drittzt è quella più indicata. Dato che tradizionalmente in ambito posix si pensa sempre in grande e si cercano di evitare legacy è la via più "corretta".

Forse sarebbe stato più chiaro se invece di dimensioni avessi parlato di ordini di grandezza.
_________________
scita et risus abundant in ore stultorum sed etiam semper severi insani sunt:wink:
mala tempora currunt...mater stultorum semper pregna est :evil:
Murpy'sLaw:If anything can go wrong, it will - O'Toole's Corollary:Murphy was an optimist :wink:
Back to top
View user's profile Send private message
Dr.Dran
l33t
l33t


Joined: 08 Oct 2004
Posts: 766
Location: Imola - Italy

PostPosted: Tue Jun 12, 2007 8:35 pm    Post subject: Reply with quote

@djinnZ
Concordo con ciò che hai detto, l'unica cosa è che sarebbe stato bello sapere su cosa si stava lavorando.

Cheers

Franco
_________________
:: [Dr.Dran] Details ::
- Linux User # 286282
- IT FreeLance Consultant
- President of ImoLUG [Imola & Faenza Linux User Group]
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Forum italiano (Italian) Forum di discussione italiano All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum