Для Усечения файла журнала:
Для Уменьшения файла журнала:
база данных также:
Используя Руководителя предприятия:-Щелчок правой кнопкой по базе данных, Всем задачам, базе данных Shrink, Файлам, Избранному файлу журнала, хорошо.
Используя T-SQL:-Dbcc Shrinkfile ([Log_Logical_Name])
можно найти логическое имя файла журнала путем выполнения sp_helpdb или путем взгляда в свойствах базы данных в Руководителе предприятия.
Укороченная версия оболочки:
xargs -n1 < input.txt | sort | uniq -c | sort -nr | head
Если вы хотите ранжирование без учета регистра, замените uniq -c
на uniq -ci
.
Еще немного короче, если вы довольны изменением ранга и ухудшением читабельности из-за отсутствия пробелов. Это синхронизируется с 46 символами:
xargs -n1<input.txt|sort|uniq -c|sort -n|tail
(Вы могли бы сократить это до 38, если бы вам было разрешено сначала переименовать входной файл в просто «i».)
Обратите внимание, что в этом особом случае больше не встречается ни одного слова более 9 раз мы можем сократить еще 3 символа, отбросив аргумент '-n' из окончательной сортировки:
xargs -n1<input.txt|sort|uniq -c|sort|tail
Это сокращает это решение до 43 символов без переименования входного файла. (Или 35, если вы это сделаете.)
Использование xargs -n1
для разделения файла на одно слово в каждой строке предпочтительнее решения tr \ \\ n
, так как это создает много пустых строк. Это означает, что решение неверное, потому что в нем отсутствует Никсон и 256 раз отображается пустая строка. Однако пустая строка - это не «слово».
Редакция предыдущей записи , которая должна сохранить 10 символов:
h = {}
File.open('f.1').each {|l|l.split(/ /).each{|e|h[e]==nil ?h[e]=1:h[e]+=1}}
h.sort{|a,b|a[1]<=>b[1]}.last(10).each{|e|puts"#{e[1]} #{e[0]}"}
Perl
86 символов 94, если вы посчитаете входное имя файла.
perl -anE'$_{$_}++for@F;END{say"$_{$_} $_"for@{[sort{$_{$b}<=>$_{$a}}keys%_]}[0..10]}' test.in
Если вам все равно, сколько результатов вы получите, то это только 75, не считая filename.
perl -anE'$_{$_}++for@F;END{say"$_{$_} $_"for sort{$_{$b}<=>$_{$a}}keys%_}' test.in
python 3.1 (88 символов)
import collections
collections.Counter(open('input.txt').read().split()).most_common(10)
Python 2.6, 104 символов:
l=open("input.txt").read().split()
for c,n in sorted(set((l.count(w),w) for w in l if w))[-10:]:print c,n
vim 38 и работает для всех входных данных
:%!xargs -n1|sort|uniq -c|sort -n|tail
Моя лучшая попытка с рубином, 166 символов:
h = Hash.new
File.open('f.l').each_line{|l|l.split(/ /).each{|e|h[e]==nil ?h[e]=1:h[e]+=1}}
h.sort{|a,b|a[1]<=>b[1]}.last(10).each{|e|puts"#{e[1]} #{e[0]}"}
Я удивлен, что никто еще не опубликовал безумное решение J.
Haskell, 102 символа (вау, так близко к оригиналу):
import List
(take 10.map snd.sort.map(\(x:y)->(-length y,x)).group.sort.words)`fmap`readFile"input.txt"
J , всего 55 символов:
10{.\:~~.(,.~[:<"0@(+/)=/~);;:&.><;._2[1!:1<'input.txt'
(мне еще предстоит выяснить, как элегантно выполнять манипуляции с текстом в J ... он намного лучше работает с данными, структурированными в виде массива.)
NB. read the file <1!:1<'input.txt' +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------... | Washington Washington Adams Jefferson Jefferson Madison Madison Monroe Monroe John Quincy Adams Jackson Jackson Van Buren Harrison DIES Tyler Polk Taylor DIES Fillmore Pierce ... +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------... NB. split into lines <;._2[1!:1<'input.txt' +--------------+--------------+---------+-------------+-------------+-----------+-----------+----------+----------+---------------------+-----------+-----------+-------------+-----------------+---------+--------+---------------+------------+----------+----... | Washington| Washington| Adams| Jefferson| Jefferson| Madison| Madison| Monroe| Monroe| John Quincy Adams| Jackson| Jackson| Van Buren| Harrison DIES| Tyler| Polk| Taylor DIES| Fillmore| Pierce| ... +--------------+--------------+---------+-------------+-------------+-----------+-----------+----------+----------+---------------------+-----------+-----------+-------------+-----------------+---------+--------+---------------+------------+----------+----... NB. split into words ;;:&.><;._2[1!:1<'input.txt' +----------+----------+-----+---------+---------+-------+-------+------+------+----+------+-----+-------+-------+---+-----+--------+----+-----+----+------+----+--------+------+--------+-------+-------+----+-------+-----+-----+-----+--------+----+------+---... |Washington|Washington|Adams|Jefferson|Jefferson|Madison|Madison|Monroe|Monroe|John|Quincy|Adams|Jackson|Jackson|Van|Buren|Harrison|DIES|Tyler|Polk|Taylor|DIES|Fillmore|Pierce|Buchanan|Lincoln|Lincoln|DIES|Johnson|Grant|Grant|Hayes|Garfield|DIES|Arthur|Cle... +----------+----------+-----+---------+---------+-------+-------+------+------+----+------+-----+-------+-------+---+-----+--------+----+-----+----+------+----+--------+------+--------+-------+-------+----+-------+-----+-----+-----+--------+----+------+---... NB. count reptititions |:~.(,.~[:<"0@(+/)=/~);;:&.><;._2[1!:1<'input.txt' +----------+-----+---------+-------+------+----+------+-------+---+-----+--------+----+-----+----+------+--------+------+--------+-------+-------+-----+-----+--------+------+---------+--------+---------+----+------+-------+--------+------+---+------+------... |2 |2 |2 |2 |2 |1 |1 |2 |1 |1 |2 |6 |1 |1 |1 |1 |1 |1 |2 |3 |2 |1 |1 |1 |2 |2 |2 |1 |2 |1 |1 |1 |4 |2 |2 ... +----------+-----+---------+-------+------+----+------+-------+---+-----+--------+----+-----+----+------+--------+------+--------+-------+-------+-----+-----+--------+------+---------+--------+---------+----+------+-------+--------+------+---+------+------... |Washington|Adams|Jefferson|Madison|Monroe|John|Quincy|Jackson|Van|Buren|Harrison|DIES|Tyler|Polk|Taylor|Fillmore|Pierce|Buchanan|Lincoln|Johnson|Grant|Hayes|Garfield|Arthur|Cleveland|McKinley|Roosevelt|Taft|Wilson|Harding|Coolidge|Hoover|FDR|Truman|Eisenh... +----------+-----+---------+-------+------+----+------+-------+---+-----+--------+----+-----+----+------+--------+------+--------+-------+-------+-----+-----+--------+------+---------+--------+---------+----+------+-------+--------+------+---+------+------... NB. sort |:\:~~.(,.~[:<"0@(+/)=/~);;:&.><;._2[1!:1<'input.txt' +----+---+-------+----+------+----------+------+---------+------+-----+------+--------+-------+-------+---------+-------+--------+-----+----------+-------+---------+-----+---+-----+------+----+------+----+------+-----+-------+----+------+-----+-------+----... |6 |4 |3 |3 |2 |2 |2 |2 |2 |2 |2 |2 |2 |2 |2 |2 |2 |2 |2 |2 |2 |2 |1 |1 |1 |1 |1 |1 |1 |1 |1 |1 |1 |1 |1 |1 ... +----+---+-------+----+------+----------+------+---------+------+-----+------+--------+-------+-------+---------+-------+--------+-----+----------+-------+---------+-----+---+-----+------+----+------+----+------+-----+-------+----+------+-----+-------+----... |DIES|FDR|Johnson|Bush|Wilson|Washington|Truman|Roosevelt|Reagan|Nixon|Monroe|McKinley|Madison|Lincoln|Jefferson|Jackson|Harrison|Grant|Eisenhower|Clinton|Cleveland|Adams|Van|Tyler|Taylor|Taft|Quincy|Polk|Pierce|Obama|Kennedy|John|Hoover|Hayes|Harding|Garf... +----+---+-------+----+------+----------+------+---------+------+-----+------+--------+-------+-------+---------+-------+--------+-----+----------+-------+---------+-----+---+-----+------+----+------+----+------+-----+-------+----+------+-----+-------+----... NB. take 10 10{.\:~~.(,.~[:<"0@(+/)=/~);;:&.><;._2[1!:1<'input.txt' +-+----------+ |6|DIES | +-+----------+ |4|FDR | +-+----------+ |3|Johnson | +-+----------+ |3|Bush | +-+----------+ |2|Wilson | +-+----------+ |2|Washington| +-+----------+ |2|Truman | +-+----------+ |2|Roosevelt | +-+----------+ |2|Reagan | +-+----------+ |2|Nixon | +-+----------+
Perl: 90
Perl: 114 (включая perl, параметры командной строки, одинарные кавычки и имя файла)
perl -nle'$h{$_}++for split/ /;END{$i++<=10?print"$h{$_} $_":0for reverse sort{$h{$a}cmp$h{$b}}keys%h}' input.txt
vim 60
:1,$!tr " " "\n"|tr -d "\t "|sort|uniq -c|sort -n|tail -n 10
Вот сжатая версия сценария оболочки с учетом того, что для разумной интерпретации входных данных (без начальных или конечных пробелов) вторая команда tr и sed в оригинале не изменяет данные (проверяется вставкой ' tee out.N 'в подходящих точках и проверка размеров выходного файла - идентичны). Оболочке нужно меньше пробелов, чем людям - и использование cat вместо перенаправления ввода / вывода приводит к пустой трате места.
tr \ \\n<input.txt|sort|uniq -c|sort -n|tail -10
Это весит 50 символов, включая новую строку в конце скрипта.
С двумя дополнительными наблюдениями (взятыми из других людей) ответы):
tail
сам по себе эквивалентен ' tail -10
', и это можно уменьшить еще на 7 символов (до 43, включая завершающую новую строку):
tr \ \\n<input.txt|sort|uniq -c|sort|tail
Используя ' xargs -n1
' (без заданного префикса команды) вместо ' tr
' чрезвычайно умен; он имеет дело с начальными, конечными и множественными вложенными пробелами (чего нет в этом решении).
C #, 153:
Считывает файл по адресу p
и выводит результаты на консоль:
File.ReadLines(p)
.SelectMany(s=>s.Split(' '))
.GroupBy(w=>w)
.OrderBy(g=>-g.Count())
.Take(10)
.ToList()
.ForEach(g=>Console.WriteLine(g.Count()+"|"+g.Key));
Если просто создается список, но не выводится на консоль , это 93 символа.
6|DIES
4|FDR
3|Johnson
3|Bush
2|Washington
2|Adams
2|Jefferson
2|Madison
2|Monroe
2|Jackson
Отсутствие AWK вызывает беспокойство.
xargs -n1<input.txt|awk '{c[$1]++}END{for(p in c)print c[p],p|"sort|tail"}'
75 символов.
Если вы хотите получить немного больше AWKy, вы можете забыть xargs:
awk -v RS='[^a-zA-Z]' /./'{c[$1]++}END{for(p in c)print c[p],p|"sort|tail"}' input.txt
Ruby 66B
puts (a=$<.read.split).uniq.map{|x|"#{a.count x} "+x}.sort.last 10
Ruby
115 chars
w = File.read($*[0]).split
w.uniq.map{|x| [w.select{|y|x==y}.size,x]}.sort.last(10).each{|z| puts "#{z[1]} #{z[0]}"}
Это явно не самое маленькое решение, но я все равно решил выложить его, просто для удовольствия. :) NB: командный файл использует временный файл с именем $ для хранения временных результатов.
Исходная несжатая версия с комментариями:
@echo off
setlocal enableextensions enabledelayedexpansion
set infile=%1
set cnt=%2
set tmpfile=$
set knownwords=
rem Calculate word count
for /f "tokens=*" %%i in (%infile%) do (
for %%w in (%%i) do (
rem If the word hasn't already been processed, ...
echo !knownwords! | findstr "\<%%w\>" > nul
if errorlevel 1 (
rem Count the number of the word's occurrences and save it to a temp file
for /f %%n in ('findstr "\<%%w\>" %infile% ^| find /v "" /c') do (
echo %%n^|%%w >> %tmpfile%
)
rem Then add the word to the known words list
set knownwords=!knownwords! %%w
)
)
)
rem Print top 10 word count
for /f %%i in ('sort /r %tmpfile%') do (
echo %%i
set /a cnt-=1
if !cnt!==0 goto end
)
:end
del %tmpfile%
Сжатая и запутанная версия, 317 символов:
@echo off&setlocal enableextensions enabledelayedexpansion&set n=%2&set l=
for /f "tokens=*" %%i in (%1)do for %%w in (%%i)do echo !l!|findstr "\<%%w\>">nul||for /f %%n in ('findstr "\<%%w\>" %1^|find /v "" /c')do echo %%n^|%%w>>$&set l=!l! %%w
for /f %%i in ('sort /r $')do echo %%i&set /a n-=1&if !n!==0 del $&exit /b
Его можно сократить до 258 символов, если эхо уже выключено, а расширения команд и отложенное раскрытие переменных включены:
set n=%2&set l=
for /f "tokens=*" %%i in (%1)do for %%w in (%%i)do echo !l!|findstr "\<%%w\>">nul||for /f %%n in ('findstr "\<%%w\>" %1^|find /v "" /c')do echo %%n^|%%w>>$&set l=!l! %%w
for /f %%i in ('sort /r $')do echo %%i&set /a n-=1&if !n!==0 del $&exit /b
Использование:
> filename.bat input.txt 10 & pause
Вывод:
6|DIES
4|FDR
3|Johnson
3|Bush
2|Wilson
2|Washington
2|Truman
2|Roosevelt
2|Reagan
2|Nixon