문서에 몇 줄이 있는지 모르기 때문에 문서를 역방향으로 출력하는 head
방법 이 있습니까 ?tail
foo.txt
즉, 처음 두 줄을 제외한 모든 내용을 다른 문서에 추가하고 싶습니다 .
답변1
이걸 이용해서 벗겨내시면 됩니다첫 번째두 줄:
tail -n +3 foo.txt
이건 탈피용이에요마지막구현에서 head
지원하는 경우 두 줄:
head -n -2 foo.txt
(파일이 \n
후자로 끝난다고 가정)
표준 사용법과 마찬가지로 tail
이러한 head
작업은 파괴적이지 않습니다. >out.txt
출력을 새 파일로 리디렉션하려면 다음을 사용하십시오.
tail -n +3 foo.txt >out.txt
이미 존재하는 경우 out.txt
파일을 덮어씁니다. 출력 >>out.txt
을 .>out.txt
out.txt
답변2
처음 N-1개 행을 제외한 모든 행을 원하면 tail
number oflines 를 호출하세요 +N
. (숫자는 유지하려는 첫 번째 줄의 줄 번호입니다. 1부터 시작합니다. 즉, +1은 맨 위에서 시작한다는 뜻이고, +2는 줄 건너뛰기를 의미하는 식입니다.)
tail -n +3 foo.txt >>other-document
마지막 N 줄을 건너뛰는 쉽고 이식 가능한 방법은 없습니다. GNU는 as를 head
허용합니다 . 그렇지 않은 경우 (예: GNU 또는 Busybox) 이를 tail과 결합할 수 있습니다.head -n +N
tail -n +N
tac
tac | tail -n +3 | tac
이식 가능한 awk 필터(테스트되지 않음)를 사용할 수 있습니다.
awk -vskip=2 '{
lines[NR] = $0;
if (NR > skip) print lines[NR-skip];
delete lines[NR-skip];
}'
큰 파일에서 마지막 몇 줄을 제거하려면 잘라내려는 섹션의 바이트 오프셋을 결정한 다음 잘라내기 수행을 사용할 수 있습니다 dd
.
total=$(wc -c < /file/to/truncate)
chop=$(tail -n 42 /file/to/truncate | wc -c)
dd if=/dev/null of=/file/to/truncate seek=1 bs="$((total-chop))"
파일을 처음부터 자를 수는 없지만 대용량 파일의 처음 몇 줄을 제거해야 하는 경우 다음을 수행할 수 있습니다.모바일 콘텐츠.
답변3
처음 n 줄을 삭제하려면 GNU sed를 사용할 수 있습니다. 예를 들어 n = 2인 경우
sed -n '1,2!p' input-file
이는 "이 범위를 제외한다" 는 의미입니다 !
. 상상할 수 있듯이 더 복잡한 결과를 얻을 수 있습니다.
sed -n '3,5p;7p'
라인 3,4,5,7이 표시됩니다. 주소 대신 정규식을 사용하면 더 많은 성능을 얻을 수 있습니다.
제한 사항은 줄 번호를 미리 알아야 한다는 것입니다.
답변4
{ head -n2 >/dev/null
cat >> other_document
} <infile
만약에<infile
정규적이고,lseek()
-able 파일이라면 예, 무엇이든 상관없습니다. 위의 내용은 완전히 POSIX를 지원하는 구성입니다.