문제

인쇄하고 싶은 매우 긴 파일이 있지만 예를 들어 첫 번째 1E6 라인을 건너 뜁니다. 나는 Cat Man 페이지를 살펴 보지만 이것을 할 수있는 옵션은 보이지 않았습니다. 나는 이것 또는 간단한 bash 프로그램을 수행하라는 명령을 찾고 있습니다.

도움이 되었습니까?

해결책

꼬리가 필요합니다. 몇 가지 예 :

$ tail great-big-file.log
< Last 10 lines of great-big-file.log >

특정 수의 "첫 번째"라인을 건너 뛰어야하는 경우 사용하십시오.

$ tail -n +<N+1> <filename>
< filename, excluding first N lines. >

즉, N 라인을 건너 뛰려면 라인 n+1 인쇄를 시작합니다. 예시:

$ tail -n +11 /tmp/myfile
< /tmp/myfile, starting at line 11, or skipping the first 10 lines. >

마지막 줄을보고 싶다면 "+"를 생략하십시오.

$ tail -n <N> <filename>
< last N lines of file. >

다른 팁

시스템에 GNU 꼬리를 사용할 수있는 경우 다음을 수행 할 수 있습니다.

tail -n +1000001 huge-file.log

그건 + 당신이 원하는 것을하는 캐릭터. Man Page의 인용 :

k의 첫 번째 문자 (바이트 또는 선수)가`+'인 경우 각 파일의 시작부터 kth 항목으로 시작하는 인쇄.

따라서 주석에서 언급 한 바와 같이, +1000001을 처음 1,000,000 줄에 이어 첫 번째 항목으로 인쇄하기 시작합니다.

파일의 첫 10 줄을 제거하는 가장 쉬운 방법 :

$ sed 1,10d file.txt

awk가있는 덜 장황한 버전 :

awk 'NR > 1e6' myfile.txt

그러나 정수 번호를 사용하는 것이 좋습니다.

제안하기 위해 a sed 대안. :) 먼저 백만 줄을 건너 뛰려면 시도하십시오 |sed '1,1000000d'.

예시:

$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005

처음 두 줄을 건너 뛰고 싶다면
tail -n +3 <filename>

첫 번째 X 라인을 건너 뛰고 싶다면
tail -n +$((x+1)) <filename>

첫 10 줄을 보려면 아래와 같이 SED를 사용할 수 있습니다.

sed -n '1,10 p' myFile.txt

또는 20에서 30까지의 줄을 보려면 다음을 사용할 수 있습니다.

sed -n '20,30 p' myFile.txt

사용 sed delete 명령 a 범위 주소. 예를 들어:

$ sed 1,100d file.txt # Print file.txt omitting lines 1-100.

또는 알려진 범위 만 인쇄하려면 인쇄 명령을 -n 깃발:

$ sed -n 201,300p file.txt # Print lines 201-300 from file.txt

이 솔루션은 GNU 유틸리티의 존재에 관계없이 모든 UNIX 시스템에서 안정적으로 작동해야합니다.

이 쉘 스크립트는 나에게 잘 작동합니다.

#!/bin/bash
awk -v initial_line=$1 -v end_line=$2 '{
    if (NR >= initial_line && NR <= end_line) 
    print $0
}' $3

이 샘플 파일 (file.txt)과 함께 사용됩니다.

one
two
three
four
five
six

명령 (파일에서 두 번째로 두 번째로 추출) :

edu@debian5:~$./script.sh 2 4 file.txt

이 명령의 출력 :

two
three
four

물론, 예를 들어 모든 인수 값이 예상되는 것을 테스트함으로써 그것을 향상시킬 수 있습니다 :-)

You can do this using the head and tail commands:

head -n <num> | tail -n <lines to print>

where num is 1e6 + the number of lines you want to print.

sed -n '1d;p'

this command will delete the first line and print the rest

cat < File > | awk '{if(NR > 6) print $0}'

I needed to do the same and found this thread.

I tried "tail -n +, but it just printed everything.

The more +lines worked nicely on the prompt, but it turned out it behaved totally different when run in headless mode (cronjob).

I finally wrote this myself:

skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top