it-swarm-eu.dev

počet řádků v souboru

Určitě existuje mnoho způsobů, jak toho dosáhnout: jak mohu spočítat počet řádků v textovém souboru?

$ <cmd> file.txt
1020 lines
75
Chris Smith

Standardní způsob je s wc, který bere argumenty k určení toho, co má počítat (bajty, znaky, slova atd.); -l je pro řádky:

$ wc -l file.txt
1020 file.txt
109
Michael Mrozek

Jak řekl Michael, wc -l Je cesta. Ale pouze v případě, že máte nevysvětlitelně bash, Perl nebo awk, ale ne wc, zde je několik dalších řešení:

Pouze bash

$ LINECT=0; while read -r LINE; do (( LINECT++ )); done < file.txt; echo $LINECT

Perl Solutions

$ Perl -lne 'END { print $. }' file.txt

a mnohem méně čitelné:

$ Perl -lne '}{ print $.' file.txt

Awk Solution

$  awk 'END {print NR}' file.txt
17
Steven D

Steven D zapomněl GNU sed:

sed -n '$=' file.txt

Také pokud chcete počet bez výstupu názvu souboru a používáte wc:

wc -l < file.txt

Jen pro sakra:

cat -n file.txt | tail -n 1 | cut -f1

Varovné slovo při používání

wc -l

protože wc -l funguje počítáním\n, pokud poslední řádek ve vašem souboru nekončí účinně na novém řádku, počet řádků bude vypnut o 1. (proto stará konvence opouští nový řádek na konci vašeho souboru)

Protože si nikdy nemůžu být jistý, zda nějaký daný soubor dodržuje konvenci ukončení posledního řádku novým řádkem nebo ne, doporučuji použít některý z těchto alternativních příkazů, které budou zahrnovat poslední řádek v počtu bez ohledu na nový řádek nebo ne.

sed -n $= filename
Perl -lne 'END { print $. }' filename
awk 'END {print NR}' filename
grep -c '' filename
11
pretzels1337

V případě, že máte k dispozici pouze bash a absolutně žádné externí nástroje, můžete také provést následující:

count=0
while read
do
  ((count=$count+1))
done <file.txt
echo $count

Vysvětlení: smyčka čte standardní vstupní řádek po řádku (read; vzhledem k tomu, že s čtecím vstupem nic neděláme, není k dispozici žádná proměnná, aby byla uložena), a zvyšuje proměnnou count pokaždé . Kvůli přesměrování (<file.txt za done), standardní vstup pro smyčku je od file.txt.

3
celtschk

Příkaz grep můžete vždy použít následujícím způsobem:

grep -c "^" file.txt

Bude počítat všechny skutečné řádky file.txt, zda jeho poslední řádek obsahuje na konci znak LF).

2
Paolo