πŸ“œ Как ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ строки Π² Ρ„Π°ΠΉΠ»Π΅ Π² UNIX / Linux

by itisgood
Вопрос: Π² ΠΌΠΎΠ΅ΠΉ систСмС Linux Π΅ΡΡ‚ΡŒ Ρ„Π°ΠΉΠ» с большим количСством строк.
Как ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ±Ρ‰Π΅Π΅ количСство строк Π² Ρ„Π°ΠΉΠ»Π΅?

ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Β«wc -lΒ»


Π•ΡΡ‚ΡŒ нСсколько способов подсчСта строк Π² Ρ„Π°ΠΉΠ»Π΅.

Но ΠΎΠ΄ΠΈΠ½ ΠΈΠ· самых простых ΠΈ ΡˆΠΈΡ€ΠΎΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… способов – ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«wc -lΒ».

Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° wc ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ количСство строк, слов ΠΈ Π±Π°ΠΉΡ‚ΠΎΠ², содСрТащихся Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅, ΠΈΠ»ΠΈ Π² стандартном Π²Π²ΠΎΠ΄Π΅ (Ссли Ρ„Π°ΠΉΠ» Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½).

Бинтаксис:

# wc -l [filename]

Π˜Ρ‚Π°ΠΊ, рассмотрим Ρ„Π°ΠΉΠ», ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Π½ΠΈΠΆΠ΅:

$ cat file01.txt
this is a sample
file
with
some sample
data
1. Команда Β«wc -lΒ» Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ количСство строк:
$ wc -l file01.txt
       5 file01.txt
2. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠΏΡ€Π°Ρ‚ΡΡ‚Π°Ρ‚ΡŒ имя Ρ„Π°ΠΉΠ»Π° ΠΈΠ· Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅:
$ wc -l < file01.txt
       5
3. Π’Ρ‹ всСгда ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ для ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ wc, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ pipe.
НапримСр:
$ cat file01.txt | wc -l
       5
Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΡŽΠ±ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π² этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ΡŒ, Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ cat.
Π’Ρ‹Π²ΠΎΠ΄ любой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Π½ Π² ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ wc для подсчСта строк Π² Π²Ρ‹Π²ΠΎΠ΄Π΅.

ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ awk

Если Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ awk для опрСдСлСния количСства строк, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ awk:

$ awk 'END{print NR}' [filename]
ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:
$ awk 'END{print NR}' file01.txt
5

ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ sed

$ sed -n '$=' [filename]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:

$ sed -n '$=' file01.txt
5

ИспользованиС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep

Наш старый Π΄ΠΎΠ±Ρ€Ρ‹ΠΉ Π΄Ρ€ΡƒΠ³ “grep” Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован для подсчСта количСства строк Π² Ρ„Π°ΠΉΠ»Π΅.

Π­Ρ‚ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ‹ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ Π·Π½Π°Π»ΠΈ, Ρ‡Ρ‚ΠΎ сущСствуСт нСсколько способов подсчСта строк Π±Π΅Π· использования “wc -l”.

Но Ссли мСня спросят, я всСгда Π±ΡƒΠ΄Ρƒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«wc -lΒ» вмСсто этих ΠΎΠΏΡ†ΠΈΠΉ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это слишком Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ.

$ grep -c ".*" [filename]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:

$ grep -c ".*" file01.txt
5

Π’ GNU grep Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ синтаксис grep:

$ grep -Hc ".*" [filename]

Π’ΠΎΡ‚ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° вСрсия ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ grep для поиска количСства строк.

$ grep -c ^ file01.txt
5

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:

$ grep -Hc ".*" file01.txt
file01.txt:5

Π•Ρ‰Π΅ нСсколько ΠΊΠΎΠΌΠ°Π½Π΄

Наряду с ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌΠΈ Π²Ρ‹ΡˆΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π·Π½Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π΄ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ для поиска количСства строк Π² Ρ„Π°ΠΉΠ»Π΅.

1. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ nl (Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ строк), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΡŽ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки.

Бинтаксис ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹:

$ nl [filename]

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π²ΠΎΠ΄Π°:

$ nl file01.txt
     1	this is a sample
     2	file
     3	with
     4	some sample
     5	data

Π­Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ Ρ‚ΠΎΡ‡Π½Ρ‹ΠΉ способ ΡƒΠ·Π½Π°Ρ‚ΡŒ количСство строк.

Но Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ awk ΠΈΠ»ΠΈ sed для подсчСта послСднСй строки.

НапримСр:

$ nl file01.txt | tail -1 | awk '{print $1}'
5
2. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ vi ΠΈ vim с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ “: set number”, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ число Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строкС, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π½ΠΈΠΆΠ΅.
Если Ρ„Π°ΠΉΠ» ΠΎΡ‡Π΅Π½ΡŒ большой, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«Shift + GΒ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ послСднСй строкС ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство строк.
3. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ cat с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ -n, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ строки.
ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, здСсь Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ количСство строк ΠΈΠ· послСднСй строки.
$ cat -n file01.txt
     1	this is a sample
     2	file
     3	with
     4	some sample
     5	data
$ cat -n file01.txt | tail -1 | awk '{print $1}'
5

4. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ perl, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ количСство строк:

$ perl -lne 'END { print $. }' file01.txt
5

Бпонсор ΡΡ‚Π°Ρ‚ΡŒΠΈ – курс Π²Π°Π»ΡŽΡ‚ Π² Π±Π°Π½ΠΊΠ°Ρ… Π£ΠΊΡ€Π°ΠΈΠ½Ρ‹

You may also like

Leave a Comment