Vraag Hoe verwijder ik de bestandsnaam uit wc-l output?


Ik wil het aantal regels in een bestand tellen met wc -l maar voer alleen het nummer uit, zonder de volgende spatie en bestandsnaam. Bewerken vanuit reacties: de bestandsnaam bevat mogelijk nummers.

Momenteel als ik het doe:

wc -l /path/to/file

Op een bestand met 176 regels is de uitvoer:

176 /path/to/file

Dit bevindt zich binnen een bash-script en het resulterende nummer wordt toegewezen als de waarde van een variabele.


3
2018-03-03 16:50


oorsprong


wc -l < /path/to/file - Cyrus


antwoorden:


Ik zou gebruiken:

<file wc -l

Welke contress aan cat file | wc -l hoeft geen shell te vorken en een ander proces uit te voeren (en loopt sneller):

% time </tmp/ramdisk/file wc -l     
8000000
wc -l < /tmp/ramdisk/file  0,07s user 0,06s system 97% cpu 0,132 total
% time cat /tmp/ramdisk/file | wc -l
8000000
cat /tmp/ramdisk/file  0,01s user 0,16s system 80% cpu 0,204 total
wc -l  0,09s user 0,10s system 94% cpu 0,203 total

(/tmp/ramdisk/file werd opgeslagen in een ramdisk om I / O en caching uit de vergelijking te nemen.)

Voor kleine bestanden is het verschil inderdaad verwaarloosbaar.


Nog een andere manier zou zijn:

wc -l file | cut -d ' ' -f 1

Welke in mijn tests ongeveer hetzelfde presteert als <file wc -l.


7
2018-03-03 18:13



of je zou kunnen gebruiken wc -l < /etc/passwd . Hetzelfde, alleen een andere syntax :) - Sergiy Kolodyazhnyy
Proost, ik had geprobeerd het te gebruiken cut eerder, maar werd opgehangen aan het gebruik -c wat niet handig was omdat de lijntelling van variabele lengte kon zijn. - Arronical
Leuk. Ik heb ook geprobeerd om knippen te gebruiken, maar de syntax kan niet goed worden weergegeven. - Elder Geek


U kunt dit doen met een eenvoudige voering met behulp van een kat. cat deluge1.log | wc -l

Antwoord te simpel om een ​​lang getrokken antwoord te eisen.


5
2018-03-03 17:10



Ah, ik vergat te vermelden dat de bestandsnamen mogelijk cijfers bevatten! - Arronical
Ik heb uiteindelijk een tussenvariabele gebruikt, met bash-uitbreiding, dus line_count=$(wc -l ${file}) dan no_of_lines="${line_count/ */} - Arronical
Weer bewijzen dat er veel manieren zijn om hetzelfde resultaat te bereiken. ;-) - Elder Geek
Ik geef absoluut de voorkeur aan het simpele cat gebruik om te besparen op het toewijzen van meer variabelen. Proost voor het bewerken van de vraag, stond op het punt om daar aan toe te komen. - Arronical
Dit is een nutteloos gebruik van kat , maar het werkt zeker :) - Sergiy Kolodyazhnyy