파일 인쇄, 첫 번째 X줄 건너뛰기, Bash로
예를 들어, 처음 1,000,000줄을 건너뛰어 인쇄하고 싶은 매우 긴 파일이 있습니다.
저는 캣맨 페이지를 살펴보았지만, 이것을 할 수 있는 옵션이 없었습니다.나는 이것을 할 명령어나 간단한 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. >
파일의 처음 10줄을 제거하는 가장 쉬운 방법:
$ sed 1,10d file.txt
일반적인 경우에는X
삭제할 초기 줄 수, 주석자 및 편집자에 대한 크레딧:
$ sed 1,Xd file.txt
시스템에서 GNU 테일을 사용할 수 있는 경우 다음을 수행할 수 있습니다.
tail -n +1000001 huge-file.log
그것은+
당신이 원하는 것을 하는 캐릭터.맨 페이지에서 인용하기
K의 첫 문자(바이트 또는 줄 수)가 '+'인 경우 각 파일의 시작 부분부터 K번째 항목으로 시작하여 인쇄합니다.
따라서 주석에 명시된 대로 +1000001을 넣으면 첫 번째 1,000,000줄 이후 첫 번째 항목으로 인쇄가 시작됩니다.
처음 두 줄을 건너뛰려면 다음과 같이 하십시오.
tail -n +3 <filename>
첫 번째 x 줄을 건너뛰려면 다음을 수행합니다.
tail -n +$((x+1)) <filename>
AWK가 포함된 덜 장황한 버전:
awk 'NR > 1e6' myfile.txt
하지만 정수를 사용하는 것을 추천합니다.
sed 1,100d file.txt # Print file.txt omitting lines 1-100.
또는 알려진 범위만 인쇄하려면 print 명령을 사용합니다.-n
플래그:
sed -n 201,300p file.txt # Print lines 201-300 from file.txt
이 솔루션은 GNU 유틸리티의 유무에 관계없이 모든 유닉스 시스템에서 안정적으로 작동해야 합니다.
사용:
sed -n '1d;p'
이 명령은 첫 번째 줄을 삭제하고 나머지 줄을 인쇄합니다.
처음 10줄을 보려면 아래와 같이 사용할 수 있습니다.
sed -n '1,10 p' myFile.txt
또는 20에서 30 사이의 선을 보려면 다음을 사용할 수 있습니다.
sed -n '20,30 p' myFile.txt
단지 제안하기 위해.sed
다른 방법입니다. :) 처음 100만 줄을 건너뛰려면 시도하십시오.|sed '1,1000000d'
.
예:
$ perl -wle 'print for (1..1_000_005)'|sed '1,1000000d'
1000001
1000002
1000003
1000004
1000005
헤드 및 테일 명령을 사용하여 이 작업을 수행할 수 있습니다.
head -n <num> | tail -n <lines to print>
여기서 num은 1e6 + 인쇄할 줄 수를 나타냅니다.
이 셸 스크립트는 나에게 잘 작동합니다.
#!/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
물론 모든 인수 값이 예상되는 값인지 테스트하는 등 개선할 수 있습니다. :-)
cat < File > | awk '{if(NR > 6) print $0}'
저도 그렇게 해야 했고 이 실을 찾았습니다.
"tail -n +"를 시도했지만, 모든 것이 인쇄되었습니다.
더 많은 + 행이 프롬프트에서 잘 작동했지만 헤드리스 모드(크론 작업)에서 실행할 때 완전히 다르게 동작했습니다.
결국 제가 직접 쓴 것입니다.
skip=5
FILE="/tmp/filetoprint"
tail -n$((`cat "${FILE}" | wc -l` - skip)) "${FILE}"
언급URL : https://stackoverflow.com/questions/604864/print-a-file-skipping-the-first-x-lines-in-bash
'IT' 카테고리의 다른 글
Postgres for Insert 문에서 UUID를 생성하시겠습니까? (0) | 2023.05.18 |
---|---|
추적 출력을 콘솔로 리디렉션 (0) | 2023.05.18 |
Linux에서 포트가 열려 있는지 효율적으로 테스트합니까? (0) | 2023.05.18 |
Xcode 7 베타 경고:인터페이스 방향 및 시작 스토리보드 (0) | 2023.05.18 |
socket.io 과 웹 소켓의 차이점 (0) | 2023.05.13 |