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


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.