여러 줄로 awk를 실행하는 방법은 무엇입니까?

여러 줄로 awk를 실행하는 방법은 무엇입니까?

을 사용하여 일부 행을 추출하고 싶습니다 awk. 다음 작업을 수행하는 것이 가능합니까?

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

122~129행의 세부정보를 어떻게 표시하나요?

답변1

당신은 그것이 어떻게 작동하는지 이해하지 못했습니다 awk. 지정된 "프로그램"은언제나입력의 각 라인(또는 awk 용어로 "레코드")에 대해 한 번 실행되며 필요 FOR나 유사한 구성이 필요하지 않습니다. 그냥 사용:

자세한 방법

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

더 컴팩트한 접근 방식

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

이는 일반적으로 처리 중인 현재 행인 NR"번호가 매겨진 레코드"인 범위를 제공합니다 .awk

답변2

또 다른 대안은 다음을 사용하는 것입니다 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 문제.

답변3

awkcoreutils를 사용하여 이 작업을 수행하는 또 다른 방법(저는 이 방법을 선호하지만):

ls -l | tail -n +122 | head -n 8

관련 정보