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


10

コマンドがあります:

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

passwdファイルのすべての行の文字数を出力します。

52
52
61
48
81
58
etc.

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

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

52
52
61

@ilkkachu true。
njzk2 2017年

のように空白を無視したい場合は、以下を使用してください awk '(NR<=line) && length($0) {print length($0)}' line=3 file
VIPIN KUMAR 2017年

回答:


17

知らせるawk十分な行が読み込まれたときに終了します。

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

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


トリッキーでクール!(+1)

2
いずれかまたは行が空の場合、割り当てはゼロ(偽の値)と評価され、長さは出力されません。
ilkkachu 2017年

@ilkkachu:状況によっては、空の行を無視するのが妥当でしょう。これについてのメモを追加しました。
トール

14

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

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 2017年

8
たぶん逆もhead -n3 /etc/passwd | awkそうなので、awkはファイル全体を処理する必要はありません。
Maerlyn 2017年

1
AWKは行を数えることができ、は必要ありませんhead
追って通知があるまで一時停止。

@DennisWilliamson-コメントをありがとう、使用headは私の頭に浮かんだ最初の実用的なソリューションでした。私はawkソリューションのみを使用する@ Thor、@ JJoaoの回答に賛成しています。
Yaron
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.