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
하나 이상의 행이 비어있는 경우 할당은 0 (거짓 값)으로 평가되고 길이가 인쇄되지 않습니다.
ilkkachu

@ilkkachu : 상황에 따라 빈 줄을 무시하는 것이 합리적입니다. 이에 대한 메모를 추가했습니다.
Thor

14

직접적인 Awk 버전 (@ Thor 's만큼 효율적이지는 않지만)

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

3
이 인 경우 awk '{ print length } NR>=3 { exit }' /etc/passwd찬성했습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

3
@DennisWilliamson, 감사합니다. 그것은 매우 좋은 제안입니다. Thor의 제안에 이미 암시되어 있기 때문에 대답에 포함시키지 않을 것입니다.

5

awk@Thor와 @JJoao (+1 from me)에서 잘 설명 된 것처럼 명령만으로 실행할 수 있습니다.

당신은 결합 할 수 있습니다 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 

@ msjavx86 - 위대한 :)하시기 바랍니다 동의 당신이 그것을 할 수 있습니다 때, 대답을
Yaron

물론 나는 약 10 분 안에;) 다시 감사합니다!
bambosze_babuni

8
어쩌면 리버스 일 수도 head -n3 /etc/passwd | awk있으므로 awk는 전체 파일을 처리 할 필요가 없습니다.
Maerlyn

1
AWK는 줄을 세지 않아도됩니다 head.
추후 공지가있을 때까지 일시 중지되었습니다.

@DennisWilliamson-의견을 보내 주셔서 감사합니다 head. 나는 awk해결책 만 사용하는 @Thor, @JJoao 답변을 upvoted했습니다 .
Yaron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.