web-dev-qa-db-ja.com

awk-ファイルの最初のn行の文字数を印刷する方法

私にはコマンドがあります:

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

passwdファイルの各行の文字数を出力します:

52
52
61
48
81
58
etc.

最初のn行だけの文字数を印刷するにはどうすればよいですか?

たとえば、最初の3行については次のようになります。

52
52
61
10
bambosze_babuni

awkに、十分な行が読み取られたら終了するように指示します。

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

このソリューションは空行を無視しますが、行数は無視します。

17
Thor

直接のAwkバージョン(@Thorほど効率的ではありません)が、もう少し明確です:

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

@Thorと@JJoao(私からの+1)によってうまく説明されているように、awkのみのコマンドで実行できます。

以下に説明するように、awkheadをパラメーター-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 
5
Yaron