Re: Come isolare il timestamp di un file? [ls, cut e num. campi/field]
* Felipe Salvador <felipe.salvador@gmail.com> [250119, 22:28]:
> On Fri, Jan 25, 2019 at 07:57:49PM +0100, Ennio-Sr wrote:
> > Ciao a tutti,
> >
> > sto cercando di isolare il timestamp di alcuni file per poter creare una
> > 'condizione' ('if') in uno script di controllo.
> > Non avendo mai usato 'awk' ho provato con ls -l e cut, ma il risultato
> > sperato viene alterato dagli spazi dei singoli campi, non potendo
> > prevedere il campo in cui si collocherà il timestamp del file che mi
> > interessa.
> >
> > Una occhiata alle righe che seguono vale più di cento spiegazioni:
> >
> > --------------------- quote ---------------------------
> >
> > Script started on Fri 25 Jan 2019 18:38:14 CET
> > mennio@mcmini-4_1-deb:~/prove$ l alias ls
> > alias ls='ls -s -F -T 0 -b -H -1 -C --color=auto'
> > [il risultato non cambia se uso il comando con la sola opzione -l]
> > ennio@mcmini-4_1-deb:~/prove$ ls -l file?
> > 52 -rw-r----- 1 ennio ennio 52598 Sep 8 00:27 file1
> > 356 -rw-r----- 1 ennio ennio 363137 Jan 25 17:34 file2
> > 4 -rw-r----- 1 ennio ennio 2179 Jan 25 17:35 file3
> > ennio@mcmini-4_1-deb:~/prove$ ls -l file? | cut -d ' ' -f 1
> >
> > 356
> >
> > ennio@mcmini-4_1-deb:~/prove$ Kls -l file? | cut -d ' ' -f 2
> > 52
> > -rw-r-----
> >
> > ennio@mcmini-4_1-deb:~/prove$ Kls -l file? | cut -d ' ' -f 3,4,5,6,7
> > [...]
> >
> > ennio@mcmini-4_1-deb:~/prove$ Kls -l file? | cut -d ' ' -f 9
> > Sep
> > 17:34
> >
> > ennio@mcmini-4_1-deb:~/prove$ Kls -l file? | cut -d ' ' -f 12
> > 00:27
> >
> > 25
> > ennio@mcmini-4_1-deb:~/prove$ Kls -l file? | cut -d ' ' -f 13
> > file1
> >
> > 17:35
> > ennio@mcmini-4_1-deb:~/prove$ Kexit
> >
> > Script done on Fri 25 Jan 2019 18:39:40 CET
> >
> > ---------------------- unquote ----------------------
> >
> > Come si vede, la colonna del timestamp corrisponde a campi diversi
> > secondo il numero di spazi di ogni riha prodotta da 'ls'.
> > Penso che se potessi usare '\t' (TAB) come delimiter potrei ottenere il
> > risultato desiderato, ma non mi pare sia possibile ;-(
> >
> > Avete suggerimenti su come potrei individuare quel dato, magari con awk?
>
> L'output di ls è delimitato da spazi, puoi rimpiazzarli con tr:
>
> ls -l | tr -s ' ' ',' | cut -d ',' -f 4,5,6,7,8
>
> felipe,4096,apr,16,2018
> felipe,4096,apr,24,2018
> felipe,18432,giu,21,2018
> felipe,4096,mag,16,2017
> felipe,4096,giu,20,2016
> felipe,4096,nov,2,17:22
> felipe,4096,lug,7,2018
> felipe,97261,giu,10,2018
> felipe,101788,giu,10,2018
>
Ti ringrazio, Felipe, ma la cosa non funziona: il problema è dovuto
proprio agli spazi, che al variare del size dei file sono diversi e
restano tali anche se vengono sostituiti dalla virgola.
Guarda che succede:
il comando
: r !ls -l prove/file? | tr -s ' ' ',' | cut -d ',' -f 1-10
in un primo tempo ha dato come risultato:
,52,-rw-r-----,1,ennio,ennio,52598,Sep,8,00:27,prove/file1
356,-rw-r-----,1,ennio,ennio,363137,Jan,25,17:34,prove/file2
,4,-rw-r-----,1,ennio,ennio,2179,Jan,25,17:35,prove/file3
per cui, ripetendo il comando con l'estrazione del campo 9 ottenevo:
8
17:34
25
Ma, fatto strano, nei successivi tentativi il risultato è stato diverso:
-rw-r-----,1,ennio,ennio,52598,Sep,8,00:27,prove/file1
-rw-r-----,1,ennio,ennio,363137,Jan,25,17:34,prove/file2
-rw-r-----,1,ennio,ennio,2179,Jan,25,17:35,prove/file3
e poi:
: r !ls -l prove/file? | tr -s ' ' ',' | cut -d ',' -f 8'
00:27
17:34
17:35
e ancora:
: r !ls -l prove/file? | tr -s ' \t' ',' | cut -d ',' -f 8'
00:27
17:34
17:35
Concludo che il risultato mi sembra alquanto arbitrario e inadatto per
basarci un controllo...
Ciao e grazie, Ennio
--
[Perche' usare Win$ozz (dico io) se ..."anche uno sciocco sa farlo. \\?//
Fa' qualche cosa di cui non sei capace!" (diceva Henry Miller) ] (°|°)
[Why use Win$ozz (I say) if ... "even a fool can do that. )=(
Do something you aren't good at!" (as Henry Miller used to say) ]
Reply to: