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