로 일부 줄을 추출하고 싶습니다 awk
. 다음 작업을 수행 할 수 있습니까?
ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'
줄 번호 122에서 129까지의 세부 정보를 어떻게 표시 할 수 있습니까?
로 일부 줄을 추출하고 싶습니다 awk
. 다음 작업을 수행 할 수 있습니까?
ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'
줄 번호 122에서 129까지의 세부 정보를 어떻게 표시 할 수 있습니까?
답변:
awk
작동 방식을 이해하지 못했습니다 . 지정된 "프로그램"입니다 항상 각 행 (또는 AWK 용어로 "레코드")의 입력에 대해 한 번 실행에 대한 필요가 없습니다 FOR
또는 유사한 구조. 그냥 사용하십시오 :
자세한 방법
ls -l | awk 'NR>=122 && NR<=129 { print }'
더 컴팩트 한 방법
ls -l | awk 'NR==122,NR==129'
이것의 범위 NR
는 "숫자 레코드"이며 일반적으로 현재 행 awk
이 처리 중입니다.
awk
이러한 작업 의 일반적인 코드는 일반적으로 ls -l | awk 'NR==122,NR==129'
입니다.
또 다른 방법은 다음을 사용하는 것입니다 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 문제 처럼 들릴까 걱정한다 .
sed
방법sed
보다 훨씬 작고로드가 빠르 므로이 방법을 제안합니다awk
.