රේඛා ඇතිවීම වර්ග කිරීම සහ ගණන් කිරීම


177

මට Apacheලොග්ෆයිල් ඇත, access.logඑම ගොනුවේ පේළි සිදුවීම් ගණන ගණනය කරන්නේ කෙසේද? උදාහරණයක් ලෙස ප්රතිඵලයක් cut -f 7 -d ' ' | cut -d '?' -f 1 | tr '[:upper:]' '[:lower:]'කියන්නේ

a.php
b.php
a.php
c.php
d.php
b.php
a.php

මට අවශ්‍ය ප්‍රති result ලය:

3 a.php
2 b.php
1 d.php # order doesn't matter
1 c.php 

32
| sort | uniq -c
කොස්ටාස්

4
| LC_ALL=C sort | LC_ALL=C uniq -c
ස්ටෙෆාන් චසෙලාස්

එය uniqකළ හැකි බව මම කවදාවත් දැන සිටියේ නැත ..
Kokizzu

ඔබට ලොගයේ ඇති රේඛාව පිළිබඳ උදාහරණයක් තිබේද, මා සිතන පරිදි මේ සියල්ල සියලු පයිප්ප නොමැතිව අමුතු ලෙස කළ හැකිය.

එය හරි, 8.1GB ලොග් ගොනුව මිනිත්තු 2 කින් පමණ සකසන ලද අතර එය දැනට සිදු කර ඇත, තවදුරටත් මෙය අවශ්‍ය නොවේ: 3
Kokizzu

Answers:


238
| sort | uniq -c

අදහස් දැක්වීමේදී.

බවට ප්රතිදානය ගිනි අඟුරුවල sortඅකාරාදී / සංඛ්යාත්මක පිණිස බවට ප්රතිදානය සංවිධානය කරයි.

මෙය අවශ්‍යතාවයක් වන්නේ uniqනැවත නැවත රේඛාවලට පමණක් ගැලපෙන බැවිනි

a
b
a

ඔබ uniqමෙම පෙළ ගොනුවේ භාවිතා කරන්නේ නම් , එය පහත සඳහන් දෑ ලබා දෙනු ඇත:

a
b
a

මෙයට හේතුව as දෙක වෙන් කර ඇත්තේ b- ඒවා අඛණ්ඩ රේඛා නොවන බැවිනි. කෙසේ වෙතත් ඔබ මුලින්ම අකාරාදී පිළිවෙලට දත්ත වර්ග කළහොත්

a
a
b

එවිට uniqපුනරාවර්තන රේඛා ඉවත් කරනු ඇත. මෙම -cවිකල්පය uniqඅනුපිටපත් සංඛ්යාව ගණනය කිරීම් සහ ස්වරූපයෙන් ප්රතිදානය සපයයි:

2 a
1 b

යොමුව:


1
යුනික්ස් සහ ලිනක්ස් වෙත සාදරයෙන් පිළිගනිමු :) ඔබේ පිළිතුරට වැඩි විස්තර එකතු කිරීමට සහ මෙය ක්‍රියාත්මක වන්නේ ඇයි සහ කෙසේද යන්න පැහැදිලි කිරීමට පසුබට නොවන්න;)
ජෝන් ඩබ්ලිව්. ස්මිත්

1
printf '%s\n' ①.php ②.php | sort | uniq -cමට ලබා දෙයි2 ①.php
ස්ටෙෆාන් චසෙලාස්

@ StéphaneChazelas php\nphp

5
Id ජිඩර්, නැත, එයට හේතුව මගේ පෙදෙසෙහි ①.phpඇති ආකාරයටම ②.phpවර්ග කිරීම නිසා මගේ පෙදෙසෙහි සිටින අය සහ චරිත සඳහා වර්ග කිරීමේ අනුපිළිවෙලක් අර්ථ දක්වා නොමැති බැවිනි . ඔබට ඕනෑම බයිට් අගයන් සඳහා අද්විතීය අගයන් අවශ්‍ය නම් (මතක තබා ගන්න ගොනු මාර්ග අනිවාර්යයෙන්ම පෙළ නොවන බව මතක තබා ගන්න), එවිට ඔබට එම ස්ථානය C ට සවි කළ යුතුය | LC_ALL=C sort | LC_ALL=C uniq -c.
ස්ටෙෆාන් චසෙලාස්

3
එහි ප්‍රති ing ලයක් ලෙස ගණන් කිරීමේ ගොනුව වර්ග කිරීම සඳහා පහත දැක්වෙන පරිදි "sort -nr" @ eduard-florinescu පිළිතුරු ලෙස එකතු කිරීම සලකා බැලිය යුතුය.
Lluís Suñol

136
[your command] | sort | uniq -c | sort -nr

පිළිගත් පිළිතුර බොහෝ දුරට සම්පුර්ණ sort -nrවී ඇති අතර, බොහෝ විට පළමුව සිදුවන රේඛා සමඟ ප්‍රති results ල වර්ග කිරීම සඳහා අවසානයේ දී අමතර එකතු කිරීමට ඔබට අවශ්‍ය විය හැකිය

ඒකීය විකල්ප:

-c, --count
       prefix lines by the number of occurrences

වර්ග කිරීමේ විකල්ප:

-n, --numeric-sort
       compare according to string numerical value
-r, --reverse
       reverse the result of comparisons

විශේෂිත අවස්ථාවෙහිදී, ඔබ වර්ග කරන රේඛා සංඛ්‍යා වේ, sort -grඒ වෙනුවට ඔබට භාවිතා කිරීම අවශ්‍යය sort -nr, අදහස් බලන්න


3
-nවිකල්පය ගැන මට දැන ගැනීමට ඉඩ දීම ගැන ඔබට ස්තූතියි .
සිගුර්

3
නියම පිළිතුර, මෙන්න මම වාක්‍ය සහිත වචන සංඛ්‍යාවක් ගොනුවෙන් ලබා ගැනීමට භාවිතා කරන්නේ : tr ' ' '\n' < $FILE | sort | uniq -c | sort -nr > wordcount.txt. පළමු විධානය මඟින් අවකාශයන් නව රේඛා සමඟ ප්‍රතිස්ථාපනය කරයි, ඉතිරි විධානය අපේක්ෂිත පරිදි ක්‍රියා කිරීමට ඉඩ සලසයි.
බාර්

3
ඉහත විකල්ප භාවිතා කරමින් මට "23344" ට පෙර "1" ලැබේ. sort -grඒ වෙනුවට භාවිතා කිරීමෙන් මෙය විසඳේ. -g: සාමාන්‍ය සංඛ්‍යාත්මක අගය අනුව සංසන්දනය කරන්න (ඒ වෙනුවට -n: නූල් සංඛ්‍යාත්මක අගය අනුව සසඳන්න).
පීටර් ජාරික්

EtPeterJaric නියම ඇල්ලීම සහ දැන ගැනීමට ඉතා ප්‍රයෝජනවත් -grනමුත් මම සිතන්නේ එහි uniq -csort -nr
ප්‍රති output ලය

5
ඇත්ත වශයෙන්ම, දත්ත සංඛ්‍යා වන විට, -grවඩා හොඳින් ක්‍රියා කරයි. G සහ n ධජ වලින් පමණක් වෙනස් වන මෙම උදාහරණ දෙක උත්සාහ කරන්න: echo "1 11 1 2" | tr ' ' '\n' | sort | uniq -c | sort -nrසහ echo "1 11 1 2" | tr ' ' '\n' | sort | uniq -c | sort -gr. පළමුවැන්න වැරදි ලෙස වර්ග කරයි, නමුත් දෙවැන්න නොවේ.
පීටර් ජාරික්

12

ඔබ මත associative අරා භාවිතා කළ හැකිය awk පසුව -optionally- ආකාරයක :

$ awk ' { tot[$0]++ } END { for (i in tot) print tot[i],i } ' access.log | sort

ප්‍රතිදානය:

1 c.php
1 d.php
2 b.php
3 a.php

නළය දත්ත යවන විට සිදුවීම් ගණන ගණනය කරන්නේ කෙසේද?
user123456

1
ආදාන ලැයිස්තුව ඉතා විශාල නම් මෙම ප්‍රවේශය ඉතා වටී, මන්ද එයට සම්පූර්ණ ලැයිස්තුවම මතකයට කියවා එය වර්ග කිරීම අවශ්‍ය නොවේ.
neirbowj
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.