2015-09-01 3 views
1

У меня есть каталог с несколькими текстовыми файлами. Например:Список наивысшего числа внутри всех текстовых файлов (несколько текстовых файлов в каталоге)

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

Каждый текстовый файл содержит 1 строку, на этой линии является числом, т.е. «10»

мне было интересно, если бы можно как-то эхо обратно имена текстового файла скажем, 10 самых высоких чисел всех текстовых файлов.

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

ответ

1

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

<?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

Спасибо! Это прекрасный, быстрый вопрос. Можно ли перечислить число в файле рядом с выходом? Еще раз спасибо! –

0

С Баш.

Во-первых, создать некоторые файлы:

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 
1
grep . name*.txt | sort -nr -k2 | head -n 3 

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

 
name4.txt:1 
name3.txt:123 
name2.txt:444 
Смежные вопросы