• cat condizionato

    From Leonardo Boselli@21:1/5 to All on Wed Jul 31 00:20:01 2024
    This message is in MIME format. The first part should be readable text,
    while the remaining parts are likely unreadable without MIME-aware tools.

    Ho necessità di avere alcuni messggi personalizzati. il programma che li gestisce però non consente di aprire un pipe passando marametri a un programma, ma solo di prendere singoli file di testo.
    Non nè un grosso problema in quanto i cambi sono relativamante infrequenti
    (al massimo due volte al giorno, di solito una o due volte al mese) quindi pensavo di usare uno script lanciato ogni 30 minuti che legge su una
    directory se ci sono dei file parziali aggiornati e se ci sono aggiorna i
    file "totali".
    Spiego meglio:
    ho una serie di file chiamati WISnn!#.txt dove nn è un numero progressivo
    ! e # sono due caratteri alfanumerici .
    I file completi sarebbero WIS!#.txt generati da un qualcosa come
    cat WIS??[RMS0][130].txt > WISaz.txt
    quali sono i dubbi:
    nn è un progressivo, quindi la concatenazione dovrebbe avvenire in ordine rigorosamente progressivo ( come nelle directory .d dei file di
    configurazione) [quin di i file sono aggiunti nell'ordine del la rappresentazione ASCII del nome].
    Il comando di concatenazione nel caso esposto se ci sono più file
    dovrebbe prendere il primo della lista [nel caso in esempio se esistono WIS33S1.txt e WIS3303.txt dovrebbe prendere il primo e basta
    e passare quindi a WIS34… (ossia pr ogni progressivo dato dai caratteri al quarto e quinto posto prendere il primo della lista e passare alla
    "regola" successiva.)
    e questo mi pare che cat non lo faccia.
    cosa posso fare ?
    --
    Leonardo Boselli
    Firenze, Toscana, Europa
    http://i.trail.it

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Piviul@21:1/5 to Leonardo Boselli on Wed Jul 31 16:50:01 2024
    On 7/31/24 00:15, Leonardo Boselli wrote:
    Ho necessità di avere alcuni messggi personalizzati. il programma che
    li gestisce però non consente di aprire un pipe passando marametri a
    un programma, ma solo di prendere singoli file di testo.
    Non nè un grosso problema in quanto i cambi sono relativamante
    infrequenti (al massimo due volte al giorno, di solito una o due volte
    al mese) quindi pensavo di usare uno script lanciato ogni 30 minuti
    che legge su una directory se ci sono dei file parziali aggiornati e
    se ci sono aggiorna i file "totali".
    Spiego meglio:
    ho una serie di file chiamati WISnn!#.txt dove nn è un numero
    progressivo ! e # sono due caratteri alfanumerici .
    I file completi sarebbero WIS!#.txt generati da un qualcosa come
    cat WIS??[RMS0][130].txt > WISaz.txt
    quali sono i dubbi:
    nn è un progressivo, quindi la concatenazione dovrebbe avvenire in
    ordine rigorosamente progressivo ( come nelle directory .d dei file di configurazione) [quin di i file sono aggiunti nell'ordine del la rappresentazione ASCII del nome].
    Il comando di concatenazione nel caso esposto se ci sono più file
    dovrebbe prendere il primo della lista [nel caso in  esempio se
    esistono WIS33S1.txt e WIS3303.txt dovrebbe prendere il primo e basta
    e passare quindi a WIS34… (ossia pr ogni progressivo dato dai
    caratteri al quarto e quinto posto prendere il primo della lista e
    passare alla "regola" successiva.)
    e questo mi pare che cat non lo faccia.
    cosa posso fare ?
    uno script?

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Piviul@21:1/5 to Leonardo Boselli on Fri Aug 2 09:20:01 2024
    On 7/31/24 21:53, Leonardo Boselli wrote:
    On Wed, 31 Jul 2024, Piviul wrote:
    Il comando di concatenazione nel caso esposto se ci sono più file
    dovrebbe prendere il primo della lista [nel caso in  esempio se
    esistono WIS33S1.txt e WIS3303.txt dovrebbe prendere il primo e basta
    e passare quindi a WIS34… (ossia pr ogni progressivo dato dai
    caratteri al quarto e quinto posto prendere il primo della lista e
    passare alla "regola" successiva.)
    e questo mi pare che cat non lo faccia.
    cosa posso fare ?
    uno script?

    cero ma mi serve saper: se faccio cat WIZE??[10][SF0].part > WIZE.txt
    tuuti i file che trova vengono conctenati in ordine alfabetico del
    nome o in modo semicausale, per cui dovrei fare prima un ls (che mi da comuneque in ordine alfabetico e poi passale l'output di questo a xargs ?

    Non so se ho ben capito, oltre al problema dell'ordinamento c'è poi il problema del fatto che non li vuoi prendere tutti; se è così cat non
    credo da solo sia in grado di leggere quel che vuoi tu con un solo
    comando, devi usare uno script. Non è molto elegante ma a me viene in
    mente qualcosa tipo:

    for f in $(ls -1); do oldprefix=$prefix; prefix=$(echo $f | grep -o
    ^......); [ "$oldprefix" = "$prefix" ] && continue; echo $f; done

    Piviul

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Leonardo Boselli@21:1/5 to Piviul on Fri Aug 2 12:40:01 2024
    This message is in MIME format. The first part should be readable text,
    while the remaining parts are likely unreadable without MIME-aware tools.

    On Fri, 2 Aug 2024, Piviul wrote:
    cero ma mi serve saper: se faccio cat WIZE??[10][SF0].part > WIZE.txt tuuti >> i file che trova vengono conctenati in ordine alfabetico del nome o in modo >> semicausale, per cui dovrei fare prima un ls (che mi da comuneque in ordine >> alfabetico e poi passale l'output di questo a xargs ?

    Non so se ho ben capito, oltre al problema dell'ordinamento c'è poi il problema del fatto che non li vuoi prendere tutti; se è così cat non credo da
    solo sia in grado di leggere quel che vuoi tu con un solo comando, devi usare uno script. Non è molto elegante ma a me viene in mente qualcosa tipo:

    non li prendo tutti, la selezione è fatta nel mio caso da [10][SF0] dove presno solo, se ci sono, 1S 1F 10 0S 0F 00 , altre combinazioni vengono ignorate. e nella creazione dei file faccio in modo che di questi per ogno progressivo ?? ce ne sia uno solo.
    quindi il dubbio è : cat li prende in ordine rigolrosamente alfabetico
    (con le cifre qprime delle maiuscole e le maiuscole prima delle
    minuscole)?




    for f in $(ls -1); do oldprefix=$prefix; prefix=$(echo $f | grep -o ^......); [ "$oldprefix" = "$prefix" ] && continue; echo $f; done

    Piviul



    --
    Leonardo Boselli
    Firenze, Toscana, Europa
    http://i.trail.it
    tel:+393287329225

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Piviul@21:1/5 to Leonardo Boselli on Fri Aug 2 17:50:01 2024
    On 8/2/24 12:15, Leonardo Boselli wrote:
    On Fri, 2 Aug 2024, Piviul wrote:
    cero ma mi serve saper: se faccio cat WIZE??[10][SF0].part >
    WIZE.txt tuuti i file che trova vengono conctenati in ordine
    alfabetico del nome o in modo semicausale, per cui dovrei fare prima
    un ls (che mi da comuneque in ordine alfabetico e poi passale
    l'output di questo a xargs ?

    Non so se ho ben capito, oltre al problema dell'ordinamento c'è poi
    il problema del fatto che non li vuoi prendere tutti; se è così cat
    non credo da solo sia in grado di leggere quel che vuoi tu con un
    solo comando, devi usare uno script. Non è molto elegante ma a me
    viene in mente qualcosa tipo:

    non li prendo tutti, la selezione è fatta nel mio caso da [10][SF0]
    dove presno solo, se ci sono, 1S 1F 10 0S 0F 00 , altre combinazioni
    vengono ignorate. e nella creazione dei file faccio in modo che di
    questi per ogno progressivo ?? ce ne sia uno solo.
    quindi il dubbio è : cat li prende in ordine rigolrosamente alfabetico
    (con le cifre qprime delle maiuscole e le maiuscole prima delle
    minuscole)?

    Sinceramente ci ho capito poco dei tuoi files, secondo me cat non
    c'entra nulla, c'entrerà la sostituzione bash... ma cosa ti dice ls WIZE??[10][SF0].part?

    ...comunque non capisco perché non fai uno script, temi sia troppo lento?

    Piviul

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From =?utf-8?Q?Francesco_Potort=C3=AC?=@21:1/5 to All on Fri Aug 2 19:00:01 2024
    non li prendo tutti, la selezione è fatta nel mio caso da [10][SF0] dove >presno solo, se ci sono, 1S 1F 10 0S 0F 00 , altre combinazioni vengono >ignorate. e nella creazione dei file faccio in modo che di questi per ogno >progressivo ?? ce ne sia uno solo.
    quindi il dubbio è : cat li prende in ordine rigolrosamente alfabetico
    (con le cifre qprime delle maiuscole e le maiuscole prima delle
    minuscole)?

    Ah, se è tutto qui allora:

    cat `ls -1 *[10][SF0]*`
    o, se com'è probabile usi bash, cat $(ls -1 *[10][SF0]*)

    ls te li mette in ordine alfabetico. Tutto questo se non ci sono spazi o cose strane nei nomi, altrimenti bisogna fare un po' di magie col quoting. Se la cosa diventa complessa, puoi anche usare find e sort, ma i tuoi nomi di file mi sembrano educati e
    dovrebbe andar bene come sopra.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Davide Prina@21:1/5 to All on Sun Aug 4 11:50:01 2024
    Leonardo Boselli ha scritto:

    non li prendo tutti, la selezione è fatta nel mio caso da [10][SF0]
    dove presno solo, se ci sono, 1S 1F 10 0S 0F 00

    se ho capito bene hai due insiemi (il primo è [10] e il secondo è
    [SF0]) e per ogni insieme devi prendere un solo elemento e combinarlo
    con l'altro.

    $ mkdir /tmp/1
    $ cd /tmp/1
    $ touch 0 F S 1 2F A AB 3S 30 02 F0 S0 1S 1F 10 0S 0F 00
    $ ls | sed -n "/^[01]\{1\}[SF0]\{1\}$/p"
    00
    0F
    0S
    10
    1F
    1S


    e quindi per stampare il contenuto dei file trovati:

    $ for i in $(ls | sed -n "/^[01]\{1\}[SF0]\{1\}$/p" | sort); do \
    cat $i; done


    Naturalmente devi sostituire 01 e SF0 con due variabili dove metti
    i due insiemi


    in modo che di questi per ogno progressivo ??

    stai attento con l'ordinamento, dipende da cosa è impostato a sistema
    e dalle opzioni che usi con sort

    Ciao
    Davide

    --
    La mia privacy non è affar tuo
    https://noyb.eu/it
    - You do not have my permission to use this email to train an AI -
    If you use this to train your AI than you accept to distribute under AGPL license >= 3.0 all the model trained, all the source you have used to
    training your model and all the source of the program that use that model

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From Piviul@21:1/5 to Leonardo Boselli on Mon Aug 5 10:10:02 2024
    On 7/31/24 00:15, Leonardo Boselli wrote:
    Ho necessità di avere alcuni messggi personalizzati. il programma che
    li gestisce però non consente di aprire un pipe passando marametri a
    un programma, ma solo di prendere singoli file di testo.
    Non nè un grosso problema in quanto i cambi sono relativamante
    infrequenti (al massimo due volte al giorno, di solito una o due volte
    al mese) quindi pensavo di usare uno script lanciato ogni 30 minuti
    che legge su una directory se ci sono dei file parziali aggiornati e
    se ci sono aggiorna i file "totali".
    Spiego meglio:
    ho una serie di file chiamati WISnn!#.txt dove nn è un numero
    progressivo ! e # sono due caratteri alfanumerici .
    I file completi sarebbero WIS!#.txt generati da un qualcosa come
    cat WIS??[RMS0][130].txt > WISaz.txt
    quali sono i dubbi:
    nn è un progressivo, quindi la concatenazione dovrebbe avvenire in
    ordine rigorosamente progressivo ( come nelle directory .d dei file di configurazione) [quin di i file sono aggiunti nell'ordine del la rappresentazione ASCII del nome].
    Il comando di concatenazione nel caso esposto se ci sono più file
    dovrebbe prendere il primo della lista [nel caso in  esempio se
    esistono WIS33S1.txt e WIS3303.txt dovrebbe prendere il primo e basta
    e passare quindi a WIS34… (ossia pr ogni progressivo dato dai
    caratteri al quarto e quinto posto prendere il primo della lista e
    passare alla "regola" successiva.)
    e questo mi pare che cat non lo faccia.
    cosa posso fare ?

    Come ti dicevo io scripterei... a me sembra di capire che i primi 2
    caratteri dopo WIS rappresentano un progressivo numerico diciamo n e per
    ogni file che inizia con WISn bisogna farne il cat solo del primo in
    ordine alfabetico. Se è così una volta posizionati nella cartella che contiene i files questo ciclo dovrebbe funzionare:

    for p in {0..99}; do f=$(ls -1 WIZE$p* | head -n1 2>/dev/null); [ -n
    "$f" ] && ls $f; done

    Piviul

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)