awk - Як надрукувати кількість символів для перших n рядків у файлі?


10

У мене є команда:

$ awk '{ print length($0); }' /etc/passwd

Він друкує кількість символів кожного рядка у файлі passwd :

52
52
61
48
81
58
etc.

Як я можу надрукувати кількість символів лише для перших n рядків?

Наприклад - для перших 3 рядків він дав би щось на зразок:

52
52
61

@ilkkachu правда.
njzk2

Якщо ви хочете ігнорувати бланк, як-от тоді, скористайтеся нижче - awk '(NR<=line) && length($0) {print length($0)}' line=3 file
VIPIN KUMAR

Відповіді:


17

Скажіть, awkщоб вийти, коли буде прочитано достатньо рядків:

awk '$0 = length; NR==3 { exit }' /etc/passwd

Зауважте, що це рішення ігнорує порожні рядки, хоча не для кількості рядків.


хитро і круто! (+1)

2
Якщо будь-який або рядки порожні, призначення присвоюється нулю (хибне значення), і довжина не буде надрукована.
ilkkachu

@ilkkachu: Залежно від ситуації, було б розумно ігнорувати порожні рядки. Я додав до цього записку.
Тор

14

Пряма версія Awk (не настільки ефективна, як @ Thor's), але трохи більш зрозуміла:

awk 'NR <= 3 {print length}' /etc/passwd

3
Якби це було awk '{ print length } NR>=3 { exit }' /etc/passwd, я б його схвалив.
Призупинено до подальшого повідомлення.

3
@DennisWilliamson, дякую. Це дуже гарна пропозиція, я не включатиму її у свою відповідь, оскільки це вже неявно в пропозиції Тор.

5

Ви можете виконати його awkлише за допомогою команди, як це добре описано у @Thor та @JJoao (+1 від мене)

Ви можете комбінувати awkі headз параметром, що -nслідує за кількістю рядків, як описано нижче:

Дякуємо за пропозицію @Maerlyn виконати в цьому порядку: head | awk

Наприклад, ви отримаєте перші 3 рядки, використовуючи:

head -n3 /etc/passwd | awk '{ print length($0); }' 

голова людина

-n, --lines=[-]K
    print the first K lines instead of the first 10; with the leading '-', print all but the last K lines of each file 

@ msjavx86 - чудово :) прийміть відповідь, коли зможете це зробити
Yaron

звичайно, буду - приблизно через 10 хвилин;) ще раз дякую!
bambosze_babuni

8
Можливо, навіть зворотний, head -n3 /etc/passwd | awkтому awk не повинен обробляти весь файл.
Maerlyn

1
AWK може рахувати рядки, не потрібно head.
Призупинено до подальшого повідомлення.

@DennisWilliamson - дякую за коментар, використання headбуло першим робочим рішенням, яке мені прийшло в голову. Я підтримав @Thor, @JJoao відповідь, яка використовує awkлише рішення.
Ярон
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.