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 wc
sturen:
$ 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 wc
is éé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 wc
is de “woordenteller” in UNIX en UNIX-achtige besturingssystemen, maar je kunt het ook gebruiken om regels in een bestand te tellen door de -l
optie.
wc -l foo
telt 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 -l
telt 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 LF
perfect 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 wc
niet eens te tellen wat je een “regel” zou kunnen noemen. Het gebruik van wc
om regels te tellen kan heel goed leiden tot mistellingen, afhankelijk van de EOF van uw invoerbestand.
POSIX-compatibele oplossing
Je kunt grep
gebruiken 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 nl
als 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 awk
niet 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 -l
zou 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 -l
is de beste oplossing, maar voor toekomstig gebruik kun je Perl gebruiken:
perl -lne 'END { print $. }'
$.
bevat regelnummer en END
blok 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