몇 줄의 awk를 실행하는 방법?


18

로 일부 줄을 추출하고 싶습니다 awk. 다음 작업을 수행 할 수 있습니까?

ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'

줄 번호 122에서 129까지의 세부 정보를 어떻게 표시 할 수 있습니까?


루프 에서이 작업을 수행하는 경우 sed방법 sed보다 훨씬 작고로드가 빠르 므로이 방법을 제안합니다 awk.
zrajm

답변:


36

awk작동 방식을 이해하지 못했습니다 . 지정된 "프로그램"입니다 항상 각 행 (또는 AWK 용어로 "레코드")의 입력에 대해 한 번 실행에 대한 필요가 없습니다 FOR또는 유사한 구조. 그냥 사용하십시오 :

자세한 방법

ls -l | awk 'NR>=122 && NR<=129 { print }'

더 컴팩트 한 방법

ls -l | awk 'NR==122,NR==129'

이것의 범위 NR는 "숫자 레코드"이며 일반적으로 현재 행 awk이 처리 중입니다.


6
실제로 awk이러한 작업 의 일반적인 코드는 일반적으로 ls -l | awk 'NR==122,NR==129'입니다.
manatwork

awk를 사용하여 파일에서 마지막 100 줄을 얻는 명령은 무엇입니까
Shihabudheen KM

8

또 다른 방법은 다음을 사용하는 것입니다 sed.

ls -l | sed -ne '122,129p'

그러나 귀하의 질문에서 알 수 있듯이 awk를 사용하는 것이 중요하다면 Zrajm의 답변에 대한 manatwork의 의견을 따르십시오. awk의 문서에 따르면 :

   A  pattern  may  consist  of two patterns separated by a comma; in this
   case, the action is performed for all lines from an occurrence  of  the
   first pattern though an occurrence of the second.

따라서 원하는 경우 고급 조건을 만들 수도 있습니다. 예를 들면 다음과 같습니다.

ls -l | awk 'NR==122,/foobar/'

이것은 라인 122에서 출력을 시작하고 라인에 "foobar"라는 단어가 포함될 때까지 계속됩니다.

실제 사용 사례 를 알려 주면 더 나은 솔루션을 제공하는 답변을 도울 수 있습니다. 나는 이것이 XY 문제 처럼 들릴까 걱정한다 .


2

awkcoreutils를 사용 하여이 방법을 선호하는 다른 방법 :

ls -l | tail -n +122 | head -n 8
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.