awk
로 일부 줄을 추출하고 싶습니다. 다음 작업을 수행 할 수 있습니까?
ls -l | awk "BEGIN FOR(i=122;i<=129;i++) FNR==i"
라인 번호 122에서 129까지의 세부 정보를 어떻게 표시 할 수 있습니까?
설명
답변
awk
의 작동 방식을 이해하지 못했습니다. 지정된 “프로그램”은 항상 입력의 각 줄 (또는 어색한 “레코드”)에 대해 한 번씩 실행됩니다. FOR
또는 유사한 구문입니다. 다음을 사용하세요.
상세한 방법
ls -l | awk "NR>=122 && NR<=129 { print }"
더 간결한 방법
em>
ls -l | awk "NR==122,NR==129"
이것은 “번호 레코드”인 NR
의 범위를 제공합니다. awk
가 처리중인 현재 줄입니다.
댓글
- 실제로 일반적인
awk
코드는 일반적으로ls -l | awk 'NR==122,NR==129'
입니다. - awk를 사용하여 파일에서 마지막 100 줄을 가져 오는 명령은 무엇입니까?
- @ShihabudheenKM 다음을 볼 수 있습니다 : stackoverflow.com/questions/12546919/ …
답변
또 다른 방법은 sed
를 사용하는 것입니다. :
하지만 질문에서 알 수 있듯이 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 문제 .
답변
다른 방법 coreutils를 사용하여이 작업을 수행합니다 (awk
방법을 선호하지만) :
ls -l | tail -n +122 | head -n 8
답변
awk "NR == 122,NR == 129{print $0}" file
여기에서 파일의 122에서 129까지 줄을 추출 할 수 있습니다.
$0
는 122 줄에서 129 줄 사이의 전체 파일 데이터를 인쇄하는 데 사용됩니다.
sed
메서드는sed
가awk
보다 훨씬 작고로드 속도가 빠르기 때문입니다.