여러 라인 세트를 잡기 위한 Head/Tail 명령

여러 라인 세트를 잡기 위한 Head/Tail 명령

하나의 명령으로 파일의 처음 두 줄(43행과 44행)과 마지막 두 줄을 가져와야 합니다. && 또는; 같은 특수 연산자를 사용하지 않고 헤드, 테일 및 파이프 명령만 사용하여 이를 인쇄할 수 있습니까? 내가 생각할 수 있는 건 이것 뿐이야

(cat cool | head -n 2) | (tail -n +43 | head -n 2) | (tail -n  2)

하지만 고양이가 있어요...또 다른 옵션은

(head -n 2 < cool) | (tail -n +43 < cool | head -n 2) | (tail -n 2 < cool)

하지만 어떤 이유로 마지막 행만 표시됩니다.

답변1

cat cool | head예이다연합 대학(고양이를 사용하는 것은 쓸모가 없습니다). 두 번째 코드를 확인해 보겠습니다.

(head -n 2 < cool) | (tail -n +43 < cool | head -n 2) | (tail -n 2 < cool)

놀라운 점은 | command < coolstdin을 두 번 리디렉션한다는 것입니다. 이전 파이프라인 명령의 결과나 파일을 선택해야 합니다 cool. 둘 다 옵션이 아닙니다.

이제 질문으로 돌아갑니다. 솔루션단일 파일 읽기예:

  • 처음 42줄을 읽고 처음 두 줄만 표시하고 다음 40줄을 삭제합니다. 이것은 다음과 같이 번역됩니다 head -n 42 | head -n 2.
  • 다음 두 라인(라인 43 및 44)을 표시합니다. 이것은 다음과 같이 번역됩니다 head -n 2.
  • 마지막 두 줄을 표시합니다. 이것은 다음과 같이 번역됩니다 tail -n 2.

이제 이 모든 것을 종합해 보세요.

( head -n 42 | head -n 2; head -n 2; tail -n 2 ) < cool

또 다른 유사한 추론:

( head -n 2; head -n 42 | tail -n 2; tail -n 2 ) < cool

답변2

head제약 조건은 and 만 사용하므로 tail단일 명령으로는 요구 사항을 충족할 수 없다고 생각합니다.

# First two lines of the file "cool"
head -n2 cool

# Lines 43 and 44
head -n44 cool | tail -n2

# Last 2 lines
tail -n2 cool

한 줄에 세 개의 명령으로 함께 충돌시킬 수 있지만 "명령"귀하의 질문에 명시된 대로:

head -n2 cool; head -n44 cool | tail -n2; tail -n2 cool

설치된 설명서를 사용하여 및 명령에 대한 이해를 다시 높이고 싶을 수도 있습니다 head. 및 를 참조하세요.tailman headman tail

관련 정보