을 사용하여 일부 행을 추출하고 싶습니다 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
awk
coreutils를 사용하여 이 작업을 수행하는 또 다른 방법(저는 이 방법을 선호하지만):
ls -l | tail -n +122 | head -n 8