Salve, mi trovo davanti al seguente problema, ho un file che contiene centinaia di nomi messi in riga e devo fare uno script in Bash che riesca a prendere i nomi, riga per riga, per poi effettuarci delle modifiche nel caso tali nomi siano composti da più nomi, più precisamente se una persona ha più di un nome, il primo nome viene riportato per interno, mentre per gli altri nomi viene riportata solo l'iniziale. Ad esempio : luca giacomo franco diventerebbe lucagf Mi chiedevo come potrei fare? Grazie Inoltre ci sarebbe la possibilità di avere le iniziali maiuscole? |
Propongo il seguente script
Se il nome del file contenente lo script è per esempio
quindi usarlo fornendogli l'input e il nome del file di output, così
Se il file
allora l'output sarà
Edit Per leggere il valore da una variabile "$name" e metterlo in una variabile "$newname", ecco come si può fare:
Edit2 Un'altra versione un po' più semplice:
Lo script funziona grazie, mi chiedevo però come potrei inserire quello script nel mio script per adattarlo meglio a come dovrebbe essere, io ho un file che oltre a contendere i nomi ha anche altri dati sulla stessa riga, io leggo quindi la frase a pezzi, modifico quella che voglio (in questo caso il nome e basta) e poi reinserisco la frase in un file temporaneo che poi andrò a sostituire a quello di partenza. Io ho questo codice : http://pastebin.ubuntu.com/12246093/ Come potrei fare per far funzionare il tuo script nel mio, se ho ben capito dovrei portare la mia variabile name dentro il vettore nomi e poi riportarla a name nel momento in cui devo inserirla nel file. Come potrei fare ? Grazie @damiano-puleo: non usare le risposte, usa i commenti, e per lunghi output usa pastebin. Scusa sono nuovo del forum, per quanto riguarda lo script se noti le prime righe di codice appena entrati nel while, io suddivido ogni campo prendendolo da una virgola fino a quella successiva, poi ogni campo può avere una qualsiasi lunghezza o numero di parole, il mio problema in questo caso era solo gestire il campo nome @damiano-puleo: scusa, non avevo visto la virgola. Leggi l'aggiunta che ho fatto alla risposta. Grazie mille ora funziona tutto come voglio @damiano-puleo: piuttosto che darmi punti, che vengono sottratti ai tuoi, e che ti ho restituito, accetta la mia risposta, e magari dalle anche un voto positivo. Così mi darai dei punti che non vengono sottratti dai tuoi. @damiano-puleo: inoltre ho aggiunto una versione un po' più semplice. Scusami ma non sono pratico del forum, come faccio ad accettare la risposta e a darle un voto positivo? @damiano-puleo: il voto positivo me lo hai già dato, quindi hai capito da solo come si fa, si clicca sul pollice sopra al voto della risposta. Se invece clicchi sul segno di spunta, questo diventa verde e la domanda risulta accettata. Fatto, Grazie
5 su 10
mostra altri 5 commenti
|
Segui questa domanda
Via email:Una volta eseguito l'accesso potrai iscriverti a tutti gli aggiornamenti qui
Via RSS:Basi di markdown
- *corsivo* o __corsivo__
- **grassetto** o __grassetto__
- collegamento:[testo](http://url.com/ "titolo")
- immagine?
- 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:
domanda posta: 31 Aug '15, 20:29
domanda visualizzata: 2,326 volte
ultimo aggiornamento: 02 Sep '15, 13:12