linux user group brescia

immagine del castello

Archivio della mailing list

[LugBS] domanda ignorante bash scripting

Rampage Rmp atomikramp a gmail.com
Gio 17 Maggio 2012 10:43:06 UTC
ah ecco, dimenticavo..

nel caso vi interessasse, l'ho risolta così

#!/bin/bash

FILENAME=$1

for i in $(seq 1 69); do

        COUNTER=$(cat "$FILENAME" | sed s/\"//g | cut -d ',' -f $i | grep
-v "^$" | wc -l)

        if [ $COUNTER -ne 1 ]; then
                COLONNETMP=${COLONNETMP}','$i
        fi

done

COLONNE=$(echo $COLONNETMP | sed 's/^.//')

cat "$FILENAME" | sed s/\"//g | cut -d ',' -f $COLONNE

ovviamente sapevo già a priori quante colonne avevo in totale :) ma la cosa
si può facilmente adattare dinamicamente.

grazie per il supporto

Francesco

2012/5/17 Rampage Rmp <atomikramp a gmail.com>

> credo di aver risolto
>
> Francesco
>
>
> 2012/5/17 Rampage Rmp <atomikramp a gmail.com>
>
>> Grazie Gelma, in realtà è quasi tutto fatto, mi manca solo un passaggio
>> logico che la mia mente sciocca non riesce a risolvere, ma che sicuramente
>> è una banalità
>>
>> dato un array di interi, che può ovviamente variare in lunghezza oltre
>> che per valori, a fare l'equivalente di un
>>
>> cat filename | awk -F ';' '{print $1,$2,$3,$4}'
>>
>> dove 1 2 3 e 4 sono gli int dell'array?
>>
>> panico :D
>>
>> Francesco
>>
>> 2012/5/17 Andrea Gelmini <andrea.gelmini a linux.it>
>>
>>> Il 17 maggio 2012 10:36, Rampage Rmp <atomikramp a gmail.com> ha scritto:
>>> > visto che il file non è un excel, e che la cosa sarà ripetuta per
>>> molti file
>>> > analoghi, ho optato per fare uno scriptino in bash (eventualmente
>>> valuterò
>>> > python se la cosa non si reisce a fare in maniera agile) piuttosto che
>>> usare
>>> > libreoffice calc.
>>>
>>> In bash puro ti complichi un po' la vita. Puoi risolverlo dritto da
>>> AWK (che gia' ti offre tutto il necessario).
>>> In Python dovrebbe essere ancora piu' agile (perché ha un modulo
>>> dedicato).
>>> Non lo ho provato, ma io scriverei una cosa di questo tipo:
>>>
>>> -----------------------------------
>>> #!/usr/bin/python3
>>>
>>> import csv
>>>
>>> nuovocsv = csv.writer(open('/tmp/nuovo_file.csv', 'w', newline=''),
>>> delimiter=';', quoting=csv.QUOTE_ALL)
>>>
>>> with open('file_origine.csv', 'r') as fd:
>>>        reader = csv.reader(fd, delimiter=';', quoting=csv.QUOTE_ALL)
>>>        for riga in reader:
>>>                nuovi_campi=[campo for campo in riga if campo is not None]
>>>                nuovocsv.writerow(nuovi_campi)
>>> ------------------------------------
>>>
>>> > il problema è.. non ho trovato una guida decente per gestire gli array
>>> o le
>>> > liste in bash.. qualcuno mi illumina su come fare? :D
>>>
>>> E' nella documentazione ufficiale. Guarda bene. E' lo stesso
>>> meccanismo per il quale passi gli argomenti agli script o alle
>>> funzioni.
>>> n.b.: ma scusa, una banale regexp che faccia il match di una sequenza
>>> tipo ,"", e la collassi con una virgola e basta?
>>>
>>> Ciao,
>>> Gelma
>>>
>>> --
>>> Info/Lamentele/Segnalazioni: andrea.gelmini a gmail.com
>>>
>>
>>
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lugbs.linux.it/pipermail/lug/attachments/20120517/5bcc42ab/attachment.html>


Maggiori informazioni sulla lista Lug