.dsy:it. Pages (2): [1] 2 »
Show 150 posts per page

.dsy:it. (http://www.dsy.it/forum/)
- Sistemi operativi I (http://www.dsy.it/forum/forumdisplay.php?forumid=269)
-- Esercizio esame lab (http://www.dsy.it/forum/showthread.php?threadid=44091)


Posted by Cic on 20-11-2016 16:10:

Esercizio esame lab

Ciao a tutti, mi sto preparando in vista dell'esame di sistemi operativi di gennaio e c'è un esercizio, che mi è capitato all'esame di laboratorio con Monga, che non riesco proprio a risolvere. Il testo dell'esercizio diceva:

trovare tutti i file .c e contare il numero di caratteri nel loro nome.
Compresa la loro estensione, esempio pippo.c=7.

Qualcuno saprebbe darmi una mano?


Posted by Cronovirus on 20-11-2016 19:57:

Con la find trovi tutti i nomi dei file .c e con una opsione li stampi tutti di fila, poi in pipe conti i caratteri :)


Posted by Cic on 22-11-2016 10:19:

Sì, sull'idea su come procedere non ho grossi problemi. Il fatto è che una volta trovati i file .c, contate le linee dei nomi, non riesco a contare il numero di caratteri delle linee praticamente, che poi sarebbero i nomi dei file.


Posted by Cic on 22-11-2016 10:20:

Praticamente mi manca l'ultimo passaggio, perché finché si tratta di trovarli e stamparli, non ho problemi.


Posted by Cronovirus on 22-11-2016 15:24:

usa 'wc -c'


Posted by Cic on 22-11-2016 15:41:

Alla fine ci sono riuscito, se a qualcuno può interessare, ho fatto così:

sudo find / -type f -name "*.c" | rev | cut -d "/" -f1 | rev | wc -m


Posted by PrizeD on 29-12-2016 16:06:

Originally posted by Cic
Alla fine ci sono riuscito, se a qualcuno può interessare, ho fatto così:

sudo find / -type f -name "*.c" | rev | cut -d "/" -f1 | rev | wc -m


Ciao, stavo provando anche io a fare questo esercizio, e mi sono accorto che facendo così vengono contati anche gli \n presenti. Alla fine sono arrivato a:

sudo find / -type f -name "*.c" | cut -d "/" -f2 | xargs printf "%s" | wc -m

Usando printf al posto di echo non c'è più il problema di \n letti a fine riga.


Posted by Cronovirus on 29-12-2016 20:39:

find ./ -type f -name "*.c" -printf "%f" | wc -c


Posted by PrizeD on 29-12-2016 21:07:

Originally posted by Cronovirus
find ./ -type f -name "*.c" -printf "%f" | wc -c


Ma "wc -c" non stampa il numero di byte di un file?


Posted by Cronovirus on 29-12-2016 21:09:

si, nota che un carattere è un byte e quindi è giusto. Puoi usare anche wc -m, non cambia niente


Posted by PrizeD on 29-12-2016 21:40:

Si, ma l'esercizio era di contare i caratteri contenuti nel nome. E inoltre, rimane il problema degli \n, che con molta probabilità vengono contati da -c


Posted by Cronovirus on 29-12-2016 22:05:

prova per credere


Posted by Cic on 04-01-2017 12:02:

Ha ragione Cronovirus, con la soluzione proposta da lui, non vengono contati gli \n. Grazie.


Posted by PrizeD on 16-01-2017 15:41:

Scusa Cic se mi riaggancio al tuo post, ma evito di aprirne uno nuovo.
Stavo facendo questo esercizio:

- Trovare tutti i file che abbiano lo stesso numero di blocchi

count=0; prevf=""; prevb=0; find / -type f | head -20 | while read file; do blocks=$(stat -c %b $file); echo "$blocks $file"; done | sort -n | while read blocks file; do if [ $count -eq 0 ]; then prevb=$blocks; prevf=$file; fi; ((count++)); if [ $blocks -ne $prevb ]; then if [ $count -gt 2 ]; then echo "$prevb BLOCKS $prevf"; fi; prevb=$blocks; prevf=$file; count=1; fi; if [ $count -gt 1 ]; then echo "$prev BLOCKS $prevf"; prevf=$file; fi; done


In pratica leggo tutti i file e li stampo con il relativo numero di blocchi, riordino e stampo solo se trovo più di 1 file con un certo numero di blocchi. (head -20 l'ho messo per velocizzare le prove)

Che ne pensate? Come avreste fatto voi? (commenti e correzioni al codice sono più che ben accetti)


Posted by Cic on 16-01-2017 16:23:

Sembra andare bene, al momento non mi vengono in mente altre soluzione. Se ne trovo una alternativa, la pubblicherò.


All times are GMT. The time now is 01:59. Pages (2): [1] 2 »
Show all 27 posts from this thread on one page

Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.