Hoe regels in een document tellen?

Ik heb dit soort regels en ik wil weten hoeveel regels ik eigenlijk heb…

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

Is er een manier om ze allemaal te tellen met linux-commando’s?


Antwoord 1, autoriteit 100%

Gebruik wc:

wc -l <filename>

Hiermee wordt het aantal regels in <filename>uitgevoerd:

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

Of, om de <filename>weg te laten uit het resultaat, gebruik wc -l < <filename>:

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

U kunt ook gegevens naar wcsturen:

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

Antwoord 2, autoriteit 7%

Om alle regels te tellen, gebruik:

$ wc -l file

Alleen lijnen met patroongebruik filteren en tellen:

$ grep -w "pattern" -c file  

Of gebruik -v om overeenkomst om te keren:

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

Zie de grep man-pagina om de -e,-i en -x argumenten te bekijken…


Antwoord 3, autoriteit 3%

wc -l <file.txt>

Of

command | wc -l

Antwoord 4, autoriteit 2%

er zijn veel manieren. het gebruik van wcis één.

wc -l file

anderen zijn onder meer

awk 'END{print NR}' file

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

grep -c ".*" file

Antwoord 5

De tool wcis de “woordenteller” in UNIX en UNIX-achtige besturingssystemen, maar je kunt het ook gebruiken om regels in een bestand te tellen door de -loptie.

wc -l footelt het aantal regels in foo. Je kunt de uitvoer van een programma als dit ook pipen: ls -l | wc -l, die u zal vertellen hoeveel bestanden zich in de huidige map bevinden (plus één).


Antwoord 6

Als u de totale regel van alle bestanden in een map wilt controleren, kunt u find en wc gebruiken:

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

Antwoord 7

Gebruik wc:

wc -l <filename>

Antwoord 8

Als je alleen het aantal regels wilt (en niet het aantal regels en de stomme bestandsnaam die terugkomt):

wc -l < /filepath/filename.ext

Zoals eerder vermeld werken deze ook (maar zijn om andere redenen inferieur):

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

Antwoord 9

wc -ltelt geen regels.

Ja, dit antwoord is misschien een beetje laat voor de partij, maar ik heb nog niemand een robuustere oplossing in de antwoorden gevonden.

In tegenstelling tot wat vaak wordt gedacht, vereist POSIX helemaal niet dat bestanden eindigen met een teken voor een nieuwe regel. Ja, de definitie van een POSIX 3.206-lijnis als volgt:

Een reeks van nul of meer niet- <newline> tekens plus een afsluitend teken.

Waar veel mensen zich echter niet van bewust zijn, is dat POSIX ook definieert POSIX 3.195 Onvolledige regelals:

Een reeks van een of meer niet- <newline> tekens aan het einde van het bestand.

Vandaar dat bestanden zonder een achterliggende LFperfect POSIX-compatibel zijn.

Als je ervoor kiest om beide EOF-typen niet te ondersteunen, is je programma niet POSIX-compatibel.

Laten we als voorbeeld het volgende bestand eens bekijken.

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

Ongeacht de EOF, ik weet zeker dat je het ermee eens bent dat er twee regels zijn. Dat heb je ontdekt door te kijken naar hoeveel regels zijn gestart, niet door te kijken naar hoeveel regels zijn beëindigd. Met andere woorden, volgens POSIX hebben deze twee bestanden beide hetzelfde aantal regels:

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.

De man-pagina is relatief duidelijk over het tellen van nieuwe regels door wc, waarbij een nieuwe regel slechts een 0x0a-teken is:

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

Daarom probeert wcniet eens te tellen wat je een “regel” zou kunnen noemen. Het gebruik van wcom regels te tellen kan heel goed leiden tot mistellingen, afhankelijk van de EOF van uw invoerbestand.

POSIX-compatibele oplossing

Je kunt grepgebruiken om regelste tellen, net als in het bovenstaande voorbeeld. Deze oplossing is zowel robuuster als nauwkeuriger en ondersteunt alle verschillende smaken van wat een regel in uw bestand zou kunnen zijn:

$ grep -c ^ FILE

Antwoord 10

Gebruik nlals volgt:

nl filename

Van man nl:

Schrijf elk BESTAND naar de standaarduitvoer, met toegevoegde regelnummers. Met
geen BESTAND, of als BESTAND – is, lees de standaardinvoer.


Antwoord 11

Ik heb dit gebruikt:

cat myfile.txt | wc -l

Ik geef er de voorkeur aan boven het geaccepteerde antwoord omdat het de bestandsnaam niet afdrukt, en je hoeft awkniet te gebruiken om dat op te lossen. Geaccepteerd antwoord:

wc -l myfile.txt

Maar ik denk dat het antwoord van GGB667 het beste is:

wc -l < myfile.txt

Ik zal dat waarschijnlijk vanaf nu gebruiken. Het is iets korter dan mijn manier. Ik zet mijn oude manier van doen op voor het geval iemand het verkiest. De uitvoer is hetzelfde met die twee methoden.


Antwoord 12

Hierboven staan ​​de voorkeursmethodes, maar het “cat”-commando kan ook nuttig zijn:

cat -n <filename>

Laat je de hele inhoud van het bestand zien met regelnummers.


Antwoord 13

Ik zag deze vraag terwijl ik op zoek was naar een manier om meerdere bestandsregels te tellen,
dus als u meerdere bestandsregels van een .txt-bestand wilt tellen, kunt u dit doen,

cat *.txt | wc -l

het werkt ook op één .txt-bestand 😉


Antwoord 14

cat file.log | wc -l | grep -oE '\d+'
  • grep -oE '\d+': om de cijfers ALLEENte retourneren.

Antwoord 15

wc -l file.txt | cut -f3 -d" "

Retourneert alleen het aantal regels


Antwoord 16

Redirection/Piping van de uitvoer van het bestand naar wc -lzou voldoende moeten zijn, zoals het volgende:

cat /etc/fstab | wc -l

die dan het nr. alleen van lijnen.


Antwoord 17

Of tel alle regels in submappen met een bestandsnaampatroon (bijv. logbestanden met tijdstempels in de bestandsnaam):

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

Antwoord 18

tel het aantal regels en sla het resultaat op in variabele gebruik dit commando:

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


Antwoord 19

Ik weet dat dit oudis, maar toch: Tel gefilterde regels

Mijn bestand ziet er als volgt uit:

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

Als ik wil weten hoeveel bestanden er zijn verzonden OK:

grep "OK" <filename> | wc -l

OF

grep -c "OK" filename

Antwoord 20

wc -l <filename>

Dit geeft je het aantal regels en de bestandsnaam in de uitvoer.

Bijvoorbeeld

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

Uitvoer

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

Gebruik

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

om alleen het aantal regels in uitvoer te krijgen.

Bijv.

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

Uitvoer

63


Antwoord 21

Deze drop-in draagbare shell-functie [?]  werkt perfect. Voeg gewoon het volgende fragment toe aan uw .bashrc-bestand (of het equivalent voor uw shell-omgeving).

# ---------------------------------------------
#  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:]]}
}

Dit zou volledig compatibel moeten zijn met alle POSIX-compatibele shellsnaast bashen zsh.


Antwoord 22

Zoals anderen al zeiden wc -lis de beste oplossing, maar voor toekomstig gebruik kun je Perl gebruiken:

perl -lne 'END { print $. }'

$.bevat regelnummer en ENDblok wordt uitgevoerd aan het einde van het script.


Antwoord 23

Ik heb zojuist een programma gemaakt om dit te doen ( met node)

npm install gimme-lines
gimme-lines verbose --exclude=node_modules,public,vendor --exclude_extensions=html

https://github.com/danschumann/gimme-lines/tree/master


Antwoord 24

wc -l bestandsnaam

bijvoorbeeld: wc -l file.txt

het geeft je het totale aantal regels in dat bestand

gebruik tail -1 bestandsnaam

om de laatste regel te krijgen


Antwoord 25

Ik heb wc -l geprobeerd om het aantal regels uit de bestandsnaam te halen

Als u bijvoorbeeld meer wilt filteren, wilt u tellen tot het aantal becommentarieerde regels uit het bestand, gebruik dan grep ‘#’ Bestandsnaam.txt | wc -l

echo  "No of files in the file $FILENAME"
wc -l < $FILENAME
echo total number of commented lines
echo $FILENAME
grep '#' $FILENAME | wc -l

Antwoord 26

Als je een soort van BSD-gebaseerd systeem zoals macOS gebruikt, zou ik de gnu-versie van wc aanbevelen. Het struikelt niet over bepaalde binaire bestanden zoals BSD wc doet. Het zijn tenminste nog enigszins bruikbare prestaties. Aan de andere kant is BSD-staart traag als …………zzzzzzzzzz………..

Wat betreft AWK, slechts een klein voorbehoud – aangezien het werkt onder de standaardaanname van regels, wat betekent \n, als uw bestand toevallig geen nieuwe regelscheidingsteken heeft, zal AWK overtel het met 1 vergeleken met BSD of GNU wc. Ook als u dingen invoert zonder helemaal geen nieuwe regels, zoals echo -n, afhankelijk van of u meet in de sectie END { }of FNR==1, de NR zal anders zijn.


Antwoord 27

Awk redt levens (en ook lijnen):

awk '{c++};END{print c}' < file

Als u er zeker van wilt zijn dat u geen lege regels telt, kunt u het volgende doen:

awk '{/^./ && c++};END{print c}' < file

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Other episodes