Перечислите наибольшее число во всех текстовых файлах (несколько текстовых файлов в каталоге)

1

У меня есть каталог с несколькими текстовыми файлами. Например:

name1.txt
name2.txt
name3.txt 
etc.. etc..

Каждый текстовый файл содержит 1 строку, на этой строке есть число, то есть "10",

Мне было интересно, можно ли каким-то образом отследить имена текстовых файлов, например, 10 самых высоких чисел всех текстовых файлов.

Мне было интересно, можно ли это сделать в прямом эфире через PHP или периодически обновлять через скрипт bash/cron Спасибо!

Теги:
list
cron
webserver

3 ответа

1
Лучший ответ

Не самая эффективная идея, но при условии, что вы не можете использовать БД (иначе вы, вероятно, захотите):

<?php
  $files = scandir('path/to/files/directory');
  $rows = Array();
  foreach($files as $file){
    array_push($rows,file_get_contents('path/to/files/directory/'.$file);
  }
  arsort($rows);
  $i = 0;
  foreach($rows as $key => $row){
    if($i <= 10){
       echo 'On '.$files[$key].' the number is'.$row;
    }
  }
?>
  • 0
    Спасибо! Это идеальный, быстрый вопрос. Можно ли перечислить номер в файле рядом с выводом? Еще раз спасибо!
1
grep . name*.txt | sort -nr -k2 | head -n 3

Выход (например):

name4.txt:1
name3.txt:123
name2.txt:444
0

С bash.

Сначала создайте несколько файлов:

for n in $(seq 20); do echo $RANDOM > name${n}.txt; done

Теперь, топ 5:

$ for f in *; do printf "%s\t%d\n" "$f" $(<$f); done | sort -k2nr | head -n 5
name16.txt  30283
name12.txt  29976
name8.txt   28948
name4.txt   28256
name6.txt   28148

Только имена файлов

$ for f in *; do printf "%s\t%d\n" "$f" $(<$f); done | sort -k2nr | head -n 5 | cut -f1
name16.txt
name12.txt
name8.txt
name4.txt
name6.txt

Ещё вопросы

Сообщество Overcoder
Наверх
Меню