ලේඛනයක පේළි ගණන් කරන්නේ කෙසේද?


1111

මට මේ වගේ රේඛා තිබෙනවා, මට දැන ගැනීමට අවශ්‍යයි මට ඇත්ත වශයෙන්ම පේළි කීයක් තිබේද ...

09:16:39 AM  all    2.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   94.00
09:16:40 AM  all    5.00    0.00    0.00    4.00    0.00    0.00    0.00    0.00   91.00
09:16:41 AM  all    0.00    0.00    4.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:42 AM  all    3.00    0.00    1.00    0.00    0.00    0.00    0.00    0.00   96.00
09:16:43 AM  all    0.00    0.00    1.00    0.00    1.00    0.00    0.00    0.00   98.00
09:16:44 AM  all    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00  100.00
09:16:45 AM  all    2.00    0.00    6.00    0.00    0.00    0.00    0.00    0.00   92.00

ලිනක්ස් විධාන භාවිතා කරමින් ඒවා සියල්ලම ගණන් කිරීමට ක්‍රමයක් තිබේද?


4
Vim භාවිතා කර ගොනුව විවෘත කරන්න, ඉන්පසු ටයිප් කරන්න g <Ctrl-g>, එය ඔබට පේළි, වචන, තීරු සහ බයිට්
ගණනක් පෙන්වනු ඇත

38
@ Luv33preet එවිට ඔබ නැවත SO වෙත පැමිණ, vim වෙතින් පිටවන්නේ කෙසේදැයි සොයා බලයි
Skylar Ittner

5
KySkylarIttner තවද ඔබට vim වලින් පිටවන්නේ කෙසේදැයි සොයා බැලීමට අවශ්‍ය නම් <esc> :q!එකම පිළිතුර වේ. (මෙය විහිළුවක්, මෙය සියලු සුරකින ලද වෙනස්කම් මකා දමනු ඇත - විහිළුව නම් ඔබ විම් නොදන්නේ නම් ගොනුවක් අවුල් කිරීම පහසුය, එය සුරැකීමට වඩා හොඳය).
රයන්

Answers:


2081

භාවිතා කරන්න wc:

wc -l <filename>

මෙමඟින් පේළි ගණන ප්‍රතිදානය කරනු ඇත <filename>:

$ wc -l /dir/file.txt
3272485 /dir/file.txt

නැතහොත්, ප්‍රති <filename>use ල භාවිතයෙන් ඉවත් වීමට wc -l < <filename>:

$ wc -l < /dir/file.txt
3272485

ඔබට ද දත්ත නල මාර්ගගත wcකළ හැකිය:

$ cat /dir/file.txt | wc -l
3272485
$ curl yahoo.com --silent | wc -l
63

19
මේක නියමයි!! රේඛා අංකයට එකතු කර ඇති ගොනු නාමයෙන් මිදීමට ඔබට awk භාවිතා කළ හැකිය:wc -l <file> | awk '{print $1}
CheeHow

82
ඊටත් වඩා කෙටි, ඔබට කළ හැකියwc -l < <filename>
ටෙන්සි

5
GB GGB667 ඔබට ගොනු නාමයෙන් ඉවත් කළ හැකියcat <file> | wc -l
baptx

14
හා සමග watch wc -l <filename>මෙම ගොනුව එසැනින් අනුගමනය කල හැකිය. උදාහරණයක් ලෙස ලොග් ගොනු සඳහා එය ප්‍රයෝජනවත් වේ.
DarkSide

27
Wc -l "නව රේඛා" ගණන් කරන බවට පරිස්සම් වන්න. ඔබට පෙළ පේළි 2 ක් සහ ඒවා අතර එක් "නව රේඛා" සංකේතයක් තිබේ නම්, wc "2" වෙනුවට "1" ප්‍රතිදානය කරයි.
කොන්ස්ටන්ටින්

141

සියලුම රේඛා ගණනය කිරීමට භාවිතා කරන්න:

$ wc -l file

රටා භාවිතයෙන් පේළි පමණක් පෙරීමට සහ ගණන් කිරීමට:

$ grep -w "pattern" -c file  

හෝ තරගය ප්‍රතිලෝම කිරීමට -v භාවිතා කරන්න:

$ grep -w "pattern" -c -v file 

-E, -i සහ -x args දෙස බැලීමට grep man පිටුව බලන්න ...


නියමාකාරයෙන් සමහර විට grep -cවැඩ මට වඩා හොඳය. ප්‍රධාන වශයෙන් wc -lකරදරකාරී "විශේෂාංග" පෑඩින් අවකාශයේ උපසර්ගය නිසාය.
මාර්ක්හු


48

බොහෝ ක්‍රම තිබේ. භාවිතා wcකිරීම එකකි.

wc -l file

අනෙක් ඒවා ඇතුළත් වේ

awk 'END{print NR}' file

sed -n '$=' file (GNU sed)

grep -c ".*" file

4
ඔව්, නමුත් wc -l fileඔබට කළ හැකි ගොනු නාමය ලබා ගැනීම සඳහා පේළි ගණන සහ ගොනු නාමය ලබා දෙයි:filename.wc -l < /filepath/filename.ext
ggb667

GNU grep -H තර්කය භාවිතා කිරීමෙන් ගොනු නාමය සහ ගණන් ලබා දේ. grep -Hc ".*" file
ස්ලෙමිනි

මම මෙම විසඳුම් සඳහා ඡන්දය දුන්නේ wc -lනව රේඛා අක්ෂර මිස ගොනුවක සත්‍ය රේඛා නොවේ. ඔබට පේළි අවශ්‍ය නම් මෙම පිළිතුරට ඇතුළත් කර ඇති අනෙක් සියලුම විධානයන් ඔබට නිවැරදි අංකය ලබා දෙනු ඇත.
growlingchaos

27

මෙවලම wcයුනික්ස් සහ යුනික්ස් වැනි මෙහෙයුම් පද්ධතිවල ඇති “වචන කවුන්ටරය” වේ, නමුත් -lවිකල්පය එකතු කිරීමෙන් ගොනුවක පේළි ගණන් කිරීමට ඔබට එය භාවිතා කළ හැකිය.

wc -l fooතුළ ඇති පේළි ගණන ගණනය කරනු ඇත foo. ඔබට මෙවැනි වැඩසටහනකින් නල ප්‍රතිදානය ද කළ හැකිය:, ls -l | wc -lඑමඟින් වත්මන් නාමාවලියෙහි (ප්ලස් වන්) ගොනු කීයක් තිබේදැයි ඔබට කියනු ඇත.


3
ls -l | wc -l ඇත්ත වශයෙන්ම ඔබට සම්පූර්ණ ප්‍රමාණයේ රේඛාව සඳහා +1 නාමාවලියෙහි ඇති ගොනු ගණන ලබා දෙනු ඇත. ls -ld * | wc -lනිවැරදි ගොනු ගණන ලබා ගැනීමට ඔබට කළ හැකිය .
ජෝෂුවා ලෝරන්ස් ඔස්ටිල්

25

නාමාවලියක ඇති සියලුම ලිපිගොනු වල සම්පූර්ණ රේඛාව පරීක්ෂා කිරීමට ඔබට අවශ්‍ය නම්, ඔබට find සහ wc භාවිතා කළ හැකිය:

find . -type f -exec wc -l {} +


16

ඔබට අවශ්‍ය වන්නේ පේළි ගණන (සහ පේළි ගණන සහ මෝඩ ගොනු නාමය නොවේ):

wc -l < /filepath/filename.ext

කලින් සඳහන් කළ පරිදි මේවා ද ක්‍රියාත්මක වේ (නමුත් වෙනත් හේතු නිසා පහත් ය):

awk 'END{print NR}' file       # not on all unixes
sed -n '$=' file               # (GNU sed) also not on all unixes
grep -c ".*" file              # overkill and probably also slower

3
මෙම පිළිතුර පළ කරන ලද්දේ ප්‍රශ්නය ඇසීමෙන් වසර 3 කට පසුව වන අතර එය අනෙක් ඒවා පිටපත් කිරීම පමණි. පළමු කොටස සුළුපටු වන අතර දෙවැන්න නම් අවතාරයේ පිළිතුර එකතු කිරීමයි. පහත් කිරීම.
fedorqui 'SO හානිය නවත්වන්න'

අවුරුදු 4 ක් .. පහත් කිරීම. අපි බලමු අපට දශකයක් දිගු පසුබෑමක් ලබා ගත හැකිදැයි!
ඩේමියන් රොචේ

1
නැත, ඔබ වැරදියි; ghostdog ගේ පිළිතුර මුල් ප්‍රශ්නයට පිළිතුරු සපයන්නේ නැත. එය ඔබට පේළි ගණන සහ ගොනු නාමය ලබා දෙයි. ගොනු නාමය ලබා ගැනීම සඳහා ඔබට කළ හැක්කේ: filename.wc -l </filepath/filename.ext. ඒ නිසයි මම පිළිතුර පළ කළේ. awk, sed සහ grep මේ සියල්ලම තරමක් පහත් ක්‍රම වේ. නිසි ක්‍රමය මා ලැයිස්තුගත කර ඇති ක්‍රමයයි.
ggb667

8

මේ ආකාරයට භාවිතා කරන්න nl:

nl filename

සිට man nl:

රේඛා අංක එකතු කර එක් එක් ගොනුව සම්මත නිමැවුමට ලියන්න. FILE නොමැතිව, හෝ FILE වන විට - සම්මත ආදානය කියවන්න.


නව පෙළකින් අවසන් නොවන තනි පෙළක් ඇති ගොනුවක් සමඟ ක්‍රියා කරන බව මා සොයාගත් පළමු පිළිතුර මෙයයි. එය wc -l0 ලෙස වාර්තා කරයි. ස්තූතියි.
ස්කොට් ජූඩ්රි

7

මම මෙය භාවිතා කර ඇත:

cat myfile.txt | wc -l

පිළිගත් පිළිතුරට වඩා මම එයට කැමතියි එය ගොනු නාමය මුද්‍රණය නොකරන නිසා සහ එය awkනිවැරදි කිරීමට ඔබ භාවිතා කළ යුතු නැත. පිළිගත් පිළිතුර:

wc -l myfile.txt

නමුත් මම හිතන්නේ හොඳම එක GGB667 ගේ පිළිතුරයි:

wc -l < myfile.txt

මම බොහෝ විට මෙතැන් සිට එය භාවිතා කරනු ඇත. එය මගේ ක්‍රමයට වඩා තරමක් කෙටි ය. කවුරුහරි කැමති නම් මම එය කිරීමට මගේ පැරණි ක්‍රමය ඉදිරිපත් කරමි. ප්‍රතිදානය එම ක්‍රම දෙක සමඟ සමාන වේ.


3
පළමු හා අවසාන ක්‍රමය සමාන වේ. අන්තිම එක වඩා හොඳ වන්නේ එය අතිරේක ක්‍රියාවලියක් ඇති නොකරන බැවිනි

6

wc -l රේඛා ගණන් නොකරයි.

ඔව්, මෙම පිළිතුර සාදයට ටිකක් ප්‍රමාද විය හැකි නමුත්, පිළිතුරු වල වඩා ශක්තිමත් විසඳුමක් කිසිවෙකු මෙතෙක් සොයාගෙන නැත.

ජනප්‍රිය විශ්වාසයන්ට පටහැනිව, නව රේඛා අක්ෂරයකින් ලිපිගොනු අවසන් කිරීමට පොසික්ස් අවශ්‍ය නොවේ. ඔව්, POSIX 3.206 රේඛාවක අර්ථ දැක්වීම පහත පරිදි වේ:

<Newline> නොවන අක්ෂරවල ශුන්‍ය හෝ වැඩි ගණනක් සහ අවසන් වන අක්‍ෂරයක්.

කෙසේ වෙතත්, බොහෝ අය නොදන්නා දෙය නම් POSIX විසින් POSIX 3.195 අසම්පූර්ණ රේඛාව ද අර්ථ දක්වයි :

ගොනුවේ අවසානයේ ඇති <Newline> නොවන අක්ෂර එකක් හෝ වැඩි ගණනක අනුක්‍රමයකි.

එබැවින්, ලුහුබැඳීමකින් තොරව ලිපිගොනු LFපරිපූර්ණ ලෙස POSIX- අනුකූල වේ.

ඔබ EOF වර්ග දෙකටම සහය නොදක්වන්නේ නම්, ඔබේ වැඩසටහන POSIX- අනුකූල නොවේ.

උදාහරණයක් ලෙස, අපි පහත ගොනුව දෙස බලමු.

1 This is the first line.
2 This is the second line.

EOF කුමක් වුවත්, පේළි දෙකක් ඇති බව ඔබ එකඟ වනු ඇතැයි මට විශ්වාසයි. පේළි කීයක් ආරම්භ කර ඇත්දැයි බැලීමෙන් නොව පේළි කීයක් අවසන් වී ඇත්දැයි බැලීමෙන් නොවේ. වෙනත් වචන වලින් කිවහොත්, POSIX ට අනුව, මෙම ලිපිගොනු දෙකටම එකම රේඛා ප්‍රමාණයක් ඇත:

1 This is the first line.\n
2 This is the second line.\n
1 This is the first line.\n
2 This is the second line.

මෑන් පිටුව wcනව රේඛා ගණනය කිරීම සම්බන්ධයෙන් සාපේක්ෂව පැහැදිලිය , නව රේඛාවක් 0x0aචරිතයක් පමණක් වේ :

NAME
       wc - print newline, word, and byte counts for each file

එබැවින්, wcඔබ "රේඛාවක්" ලෙස හැඳින්විය හැකි දේ ගණන් කිරීමට උත්සාහ නොකරයි. wcඔබේ ආදාන ගොනුවේ EOF මත පදනම්ව, රේඛා ගණනය කිරීම භාවිතා කිරීම වැරදි ගණනය කිරීම් වලට හේතු වේ.

POSIX- අනුකූල විසඳුම

ඉහත උදාහරණයේ දී මෙන් ඔබට පේළිgrep ගණන් කිරීමට භාවිතා කළ හැකිය . මෙම විසඳුම වඩාත් ශක්තිමත් හා නිරවද්‍ය වන අතර එය ඔබගේ ගොනුවේ රේඛාවක් විය හැකි විවිධ රසයන් සඳහා සහය දක්වයි:

$ grep -c ^ FILE

5

ඉහත කැමති ක්‍රමය වන නමුත් "cat" විධානය ද ප්‍රයෝජනවත් වේ:

cat -n <filename>

රේඛා අංක සහිත ගොනුවේ සම්පූර්ණ අන්තර්ගතය ඔබට පෙන්වනු ඇත.


5

මම මෙම ප්‍රශ්නය දුටුවේ මම ගොනු ගොනු කිහිපයක් ගණනය කිරීමට ක්‍රමයක් සොයමින් සිටියදීය .එහෙත් ඔබට .txt ගොනුවක ගොනු රේඛා ගණනක් ගණනය කිරීමට අවශ්‍ය නම් ඔබට මෙය කළ හැකිය,

cat *.txt | wc -l

එය එක් .txt ගොනුවක ද ක්‍රියාත්මක වේ;)


4
cat file.log | wc -l | grep -oE '\d+'
  • grep -oE '\d+': ඉලක්කම් අංක පමණක් ආපසු ලබා දීම සඳහා .


3

wc -lපහත දැක්වෙන පරිදි ගොනුවේ ප්‍රතිදානය නැවත හරවා යැවීම / පයිප් කිරීම ප්‍රමාණවත් වේ:

cat /etc/fstab | wc -l

එමඟින් අංක ලබා දෙනු ඇත. රේඛා පමණි.


3

හෝ ගොනු නාම රටාවක් සහිත උප බහලුම්වල ඇති සියලුම පේළි ගණන් කරන්න (උදා: ගොනු නාමයේ කාලරාමු සහිත ලොග්ෆයිල්):

wc -l ./**/*_SuccessLog.csv

2

මෙය පැරණි නමුත් තවමත් පවතින බව මම දනිමි : පෙරහන් කළ රේඛා ගණන් කරන්න

මගේ ගොනුව පෙනේ:

Number of files sent
Company 1 file: foo.pdf OK
Company 1 file: foo.csv OK
Company 1 file: foo.msg OK
Company 2 file: foo.pdf OK
Company 2 file: foo.csv OK
Company 2 file: foo.msg Error
Company 3 file: foo.pdf OK
Company 3 file: foo.csv OK
Company 3 file: foo.msg Error
Company 4 file: foo.pdf OK
Company 4 file: foo.csv OK
Company 4 file: foo.msg Error

ලිපිගොනු කීයක් යවා ඇත්දැයි දැන ගැනීමට මට අවශ්‍ය නම්:

grep "OK" <filename> | wc -l

හෝ

grep -c "OK" filename

2

පේළි ගණන ගණනය කිරීම සහ විචල්‍යතාවයේ ගබඩා ප්‍රති result ල මෙම විධානය භාවිතා කරන්න:

count=$(wc -l < file.txt) echo "Number of lines: $count"


1

අනෙක් අය පැවසූ wc -lපරිදි හොඳම විසඳුම, නමුත් අනාගත යොමු කිරීම සඳහා ඔබට පර්ල් භාවිතා කළ හැකිය:

perl -lne 'END { print $. }'

$.පේළි අංකය අඩංගු වන අතර ENDස්ක්‍රිප්ට් අවසානයේ බ්ලොක් ක්‍රියාත්මක වේ.


1
ක්‍රියා නොකරයි:dir | perl -lne 'END { print $. }' Can't find string terminator "'" anywhere before EOF at -e line 1.'
VeikkoW

1
E වීක්කෝව් මට වැඩ කරයි. ඔබ වින්ඩෝස් හි සිටී නම්, විවිධ උපුටා දැක්වීමේ නීති අදාළ වේ; නමුත් OP ලිනක්ස් / බාෂ් ගැන විමසීය.
ත්‍රිත්ව

1
perl -lne '}{ print $. 'එසේම කරයි.
ටොම් ෆෙනෙක්


1

wc -l <filename>

මෙය ඔබට ප්‍රතිදාන වල පේළි ගණනක් සහ ගොනු නාමයක් ලබා දෙනු ඇත.

උදා.

wc -l 24-11-2019-04-33-01-url_creator.log

ප්‍රතිදානය

63 24-11-2019-04-33-01-url_creator.log

භාවිත

wc -l <filename>|cut -d\ -f 1

නිමැවුමේ පේළි ගණනක් පමණක් ලබා ගැනීමට.

උදා.

wc -l 24-11-2019-04-33-01-url_creator.log|cut -d\ -f 1

ප්‍රතිදානය

63


පිළිගත් (අවුරුදු දහයක් පැරණි) පිළිතුර පුනරාවර්තනය කිරීමේ වාසිය කොහිද?
jeb

මෙම ත්‍රෙඩ් එකේ ප්‍රතිදාන රේඛා අංක පමණක් ලබා ගැනීමට මට විධානයක් සොයාගත නොහැකි වූ බැවිනි.
හර්ෂ් සරෝහි

එය පිළිගත් පිළිතුරේ දෙවන උදාහරණයයි. wc -l < filename
jeb

wc -l <filename> මඟින් ගොනු නාමය මෙන්ම ප්‍රතිදානයේ පේළි ගණනද ලබා දෙයි.
හර්ෂ් සරෝහි

නැහැ, wc -l < filenameවෙනස් වේ wc -l filename, පළමු භාවිතා හරවා යැවීමේ හා පසුව නැති ඕනෑම ගොනු ප්රතිදානය දී, පෙන්වා වගේ user85509 සිට පිළිතුර
jeb

1

මෙම අතහැර දැමිය හැකි අතේ ගෙන යා හැකි ෂෙල් ශ්‍රිතය [ℹ]   චාම් එකක් මෙන් ක්‍රියා කරයි. ඔබගේ .bashrcගොනුවට පහත දැක්වෙන ස්නිපටය එක් කරන්න (හෝ ඔබේ ෂෙල් පරිසරයට සමාන) .

# ---------------------------------------------
#  Count lines in a file
#
#  @1 = path to file
#
#  EXAMPLE USAGE: `count_file_lines $HISTFILE`
# ---------------------------------------------
count_file_lines() {
    local subj=$(wc -l $1)
    subj="${subj//$1/}"
    echo ${subj//[[:space:]]}
}

මෙය bash සහ zsh වලට අමතරව සියලුම POSIX- අනුකූල ෂෙල් වෙඩි සමඟ සම්පුර්ණයෙන්ම අනුකූල විය යුතුය .


0

wc -l file_name

උදා: wc -l file.txt

එමඟින් ඔබට එම ගොනුවේ ඇති පේළි ගණන ලබා දෙනු ඇත

අන්තිම පේළිය ලබා ගැනීම සඳහා වලිගය -1 file_name භාවිතා කරන්න

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.