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

bam*_*uni 10 command-line awk text-processing

我有一个命令:

$ awk '{ print length($0); }' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

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

52
52
61
48
81
58
etc.
Run Code Online (Sandbox Code Playgroud)

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

例如 - 对于前 3 行,它会给出如下内容:

52
52
61
Run Code Online (Sandbox Code Playgroud)

Tho*_*hor 17

awk当读到足够多的行时告诉退出:

awk '$0 = length; NR==3 { exit }' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

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

  • 如果有任何行或行为空,则赋值为零(假值),并且不会打印长度。 (2认同)

小智 14

一个直接的 Awk 版本(不如@Thor 的高效),但稍微清晰一点:

awk 'NR <= 3 {print length}' /etc/passwd
Run Code Online (Sandbox Code Playgroud)

  • 如果这是`awk '{ print length } NR&gt;=3 { exit }' /etc/passwd`,我会赞成它。 (3认同)
  • @DennisWilliamson,谢谢。这是一个非常好的建议,我不会将它包含在我的答案中,因为它已经隐含在 Thor 的提议中。 (3认同)

Yar*_*ron 5

你可以awk只用命令来执行它,正如@Thor 和@JJoao(我的+1)所描述的那样

您可以结合awkhead参数-n后跟行数,如下所述:

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

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

head -n3 /etc/passwd | awk '{ print length($0); }' 
Run Code Online (Sandbox Code Playgroud)

头人

-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 
Run Code Online (Sandbox Code Playgroud)

  • 甚至可以反过来,`head -n3 /etc/passwd | awk` 所以 awk 不必处理整个文件。 (8认同)