awk-如何在文件中的前n行打印字符数?


10

我有一个命令:

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

它在passwd文件中打印每行的字符数:

52
52
61
48
81
58
etc.

如何仅打印前n行的字符数?

例如,对于前三行,它将给出类似以下内容:

52
52
61

@ilkkachu是真的。
njzk2

如果您想像这样忽略空白,请在下面使用 awk '(NR<=line) && length($0) {print length($0)}' line=3 file
VIPIN KUMAR

Answers:


17

awk当已读取足够的行时,告诉退出:

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

请注意,此解决方案会忽略空行,尽管不是行数。


棘手又酷!(+1)

2
如果有任何一行或行为空,则赋值求值为零(错误值),并且不会打印长度。
ilkkachu

@ilkkachu:根据情况,可以忽略空行。我添加了关于此的注释。
雷神

14

直接的Awk版本(不如@Thor高效),但更加清晰:

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

3
如果是这样awk '{ print length } NR>=3 { exit }' /etc/passwd,我会投票赞成。
暂停,直到另行通知。

3
@DennisWilliamson,谢谢。这是一个很好的建议,我不会在答复中包括它,因为它已经隐含在Thor的建议中。

5

您可以awk只用命令执行它,如@Thor和@JJoao(我+1)

您可以结合awkhead在参数-n后面加上行数,如下所述:

感谢@Maerlyn建议按以下顺序执行: head | awk

例如,您将使用以下方法获得前三行:

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解决方案。
亚龙
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.