0
1

Salve ho un testo con varie frasi e devo eliminare le "andate a capo (\n)" solo se la riga successiva NON inizia per un numero.

Esempio:

10 il dispositivo deve essere sviluppato
secondo le regole del design rule manual
11 Il controller deve
trasmette il dato sul bus
con enable alto
12 ....

deve diventare:

10 il dispositivo deve essere sviluppato secondo le regole del design rule manual
11 Il controller deve trasmette il dato sul bus  con enable alto
12 ....

Grazie per l'aiuto!

chiesto 21 Apr '15, 00:29

Antuan's gravatar image

Antuan
2423

modificato 21 Apr '15, 11:55

dadexix86's gravatar image

dadexix86 ♦♦
16.9k816161


Con awk, un one-liner:

awk '{ if (NR > 1 && /^[0-9]/) print ""; printf("%s", $0) }; END { print "" }' input-file
coll. permanente

ha risposto 21 Apr '15, 12:57

enzotib's gravatar image

enzotib ♦♦
14.0k112186

Funziona bene su redhat con KDE! ma ho aggiunto uno spazio accanto %s per non attaccare le parole del rigo agganciato:

awk '{ if (NR > 1 && /^[0-9]/) print ""; printf("%s ",$0) }; END { print ""}' input-file

Giusto per completezza, è possibile anche scrivere sullo stesso file di input direttamente?

Invece stranamente su UBUNTU 14.04, non mi applica la correzione! Suggerimenti?

(21 Apr '15, 19:12) Antuan Antuan's gravatar image

@Antuan se funziona,devi accettare la risposta di @enzotib

Saluti

(21 Apr '15, 20:48) Davide_74 Davide_74's gravatar image

@Antuan: non è possibile modificare il file di input direttamente.
Inoltre è strano che non funzioni su 14.04: Ubuntu usa di default mawk invece di gawk, ma lo script che ho suggerito non utilizza nessuna caratteristica particolare specifica di una particolare versione di awk.

(21 Apr '15, 20:56) enzotib ♦♦ enzotib's gravatar image

Purtroppo non ho abbastanza punti di reputazione per voti positivi. La reputazione minima richiesta è 25 (la tua è 19). Ho dato un punto a enzo, diversamente non ho capito come accettare la sua risposta! Votate la mia domanda e appena ho i punti necessari voto @enzotib

(21 Apr '15, 21:27) Antuan Antuan's gravatar image

@Antuan: NL al posto di NR mi pare strano, dato che NL non mi pare una variabile riconosciuta né da gawk né da mawk, si può sapere quale versione di awk stai usando?
Poi, è vero che non puoi dare voti positivi, però dovresti poter accettare la risposta, cliccando sul segno di spunta grigio sotto il punteggio della risposta, che se ci clicchi diventa verde.

(21 Apr '15, 21:31) enzotib ♦♦ enzotib's gravatar image

Fatto! Risposta accettata. Ti confermo che NL e' un mio erroe, stavo provando a capire perche' non va su ubuntu, awk o mawk o gawk mi mostrano lo stesso risultato, ovvero che alcune parti delle frasi vanno comunque a capo, esiste forse un altro carattere nascosto?

(21 Apr '15, 21:41) Antuan Antuan's gravatar image

Ecco un altro stralcio di testo che non va a capo:

10 Il D.Lgs. n. 165/2001 demanda alle singole Amministrazioni, che vi

provvedono secondo principi generali fissati da disposizioni di legge e,

sulla base dei medesimi, mediante atti organizzativi adottati secondo i

rispettivi ordinamenti, tra l'altro,....

11 Quale delle seguenti affermazioni circa le proprietà degli operatori M

(media aritmetica) e Var (varianza) è corretta?

12

(21 Apr '15, 21:47) Antuan Antuan's gravatar image

@Antuan: il comando cat -v input-file dovrebbe far vedere eventuali caratteri strani nell'input.

(21 Apr '15, 21:47) enzotib ♦♦ enzotib's gravatar image

Tnx! le "andate a capo" sono indicate con ^M (e giusto per capire le parole accentate è con M-h), quindi?

ti riporto in txt in questione qui: https://dl.dropboxusercontent.com/u/14839895/provatxt.zip Cmq grazie di tutto l'aiuto che puoi darmi!

(21 Apr '15, 22:08) Antuan Antuan's gravatar image

@Antuan: questo file presenta due problemi: invece dei classici fine-linea usati in unix (cioè \n) ci sono dei ritorno-carrello (cioè \r). Sistemato questo con

tr '\r' '\n' <input >output_1

si vede che anche l'encoding non è il classico UTF-8, invece pare corrispondere a un ISO-8859-9 (non sto a spiegarti come l'ho capito, che è troppo lungo). La conversione a UTF-8 si può fare con il comando:

iconv -f ISO-8859-9 output_1 >output_2

Resta da applicare lo script awk di cui sopra, ecco un link al risultato che ho ottenuto: https://dl.dropboxusercontent.com/u/503888/output.txt

(21 Apr '15, 22:56) enzotib ♦♦ enzotib's gravatar image

FANTASTICO! GRAZIE!

(21 Apr '15, 23:45) Antuan Antuan's gravatar image
La tua risposta
abilita/disabilita anteprima

Segui questa domanda

Via email:

Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui

Via RSS:

Risposte

Risposte e commenti

Basi di markdown

  • *corsivo* o __corsivo__
  • **grassetto** o __grassetto__
  • collegamento:[testo](http://url.com/ "titolo")
  • immagine?![alt testo](/path/img.jpg "titolo")
  • elenco numerato: 1. Foo 2. Bar
  • per aggiungere un'interruzione di riga, aggiungi due spazi a fine riga e premi «Invio»
  • è supportato anche semplice HTML

Tag:

×93

domanda posta: 21 Apr '15, 00:29

domanda visualizzata: 643 volte

ultimo aggiornamento: 21 Apr '15, 23:45

Chiedi è un servizio di supporto gestito da Ubuntu-it. Contattaci!

powered by OSQAPostgreSQL database
Ubuntu e Canonical sono marchi registrati da Canonical Ltd.