몇 줄에 대해 awk를 실행하는 방법.?

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

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

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

설명

  • 루프에서이 작업을 수행하는 경우 ' sed 메서드는 sedawk보다 훨씬 작고로드 속도가 빠르기 때문입니다.

답변

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 줄 사이의 전체 파일 데이터를 인쇄하는 데 사용됩니다.

댓글

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다