큰 텍스트 파일의 첫 n 줄 제거


63

2GB SQL 덤프의 처음 42 줄을 제거해야합니다.

다음을 사용하여 첫 번째 줄을 볼 수 있다는 것을 알고 있습니다.

head -n 44 dump.sql

그러나 어쨌든 편집하거나 제거해야합니까?

답변:


91

당신이 43에서 라인을 보고 싶다면

tail -n +43 dump.sql

+부호가 중요합니다 . 부호가 없으면 마지막 43 줄이 대신 tail인쇄 됩니다. 또는 'sed'

sed 1,42d dump.sql

원본 파일에서 처음 42 줄을 실제로 삭제하려면 sed -i옵션을 사용하여 변경하십시오

sed -i 1,42d dump.sql

멋진 답변, 환상적인 사용 tail. 나는 당신의 대답에서 배울 새로운 것을 여러 번 발견했습니다. 감사.
souravc

1
오 맨 테일 -n +43은 게임 체인저입니다! 나는 sed의 어색한 호출을 동일한 효과로 사용했습니다.
pfctdayelise 3

4
기기에 남은 공간이 없으면 어떻게합니까? 더 많은 기가 바이트를 소비 sed -i 1,50000000d 17GigFile하는 임시 파일 sedXYZ을 만듭니다 . 임시 파일이없는 접근법이 있습니까?
juanmf

차이 무엇 tail -n +43head -n 44질문에서 언급 한 바와 같이이?
Hashim

@juanmf gui 도구를 사용하여이 작업을 시도 할 수 있습니다 (마우스 패드를 사용하여 수행했지만 관심있는 파일은 "단지"~ 700MB입니다. 파일을로드하는 데 시간이 조금 걸립니다 ...
Digger

18

이것은 가장 쉬운 것 같습니다 :

sed '1,42d' test.sql > test2.sql

test.sql에서 1-42 행을 제거하고 test2.sql로 저장하십시오.


9
원본 파일을 유지할 필요가없는 경우 더 짧은 파일은 sed -i '1,42d'test.sql이 됩니다.
Sadi


3

Ex 모드에서 Vim을 사용할 수 있습니다 :

ex -s -c '1d42|x' dump.sql
  1. 1 첫 줄로 이동

  2. 42 42 줄을 선택하십시오

  3. d 지우다

  4. x 저장하고 닫습니다


1
임시 파일을 작성합니까? 장치에 남은 공간이 파일 크기보다 작을 때이 작업을 수행 할 수 있습니까?
juanmf

2
@juanmf이 모든 솔루션에는 임시 파일이 필요합니다. 임시 파일을 사용하지 않고 파일 에서 데이터를 제거하는 것만 가능 합니다.
PerlDuck

0

죄송합니다. 현재 실제 코드를 제공 할 수 없습니다. 그러나 라인을 따라 무언가를보십시오

tail -n arcv(`wc -l`) -44

이 작업을 수행하면 (한 번 올바른 형식으로) 파일의 줄 수 (wc -l)를 계산하고 44에서 빼서 (-44) 파일의 45 번째 줄부터 시작하여 모든 것을 인쇄합니다.

이것이 도움이되고 행운이 있기를 바랍니다.


이 호출, 아주 최적이 아닌 wc -l반면, 당신은 두 번 처리, 파일에 sed또는 tail한 번만를 처리합니다.
yo '

0

이 시도,

head -n 42 dump.sql > tmp; cat dump.sql | grep -vxf tmp > dump.sql.new; rm tmp

또는,

a=$(cat dump.sql| wc -l); tail -n "$((a-42))" dump.sql > dump.sql.new

0

이것을 추가하십시오. Mac을 사용하는 경우 백업 확장을 추가해야합니다. 이 게시물의 답변입니다 .

sed -i '.bak' 1,42d dump.sql

0

sedLinux와 Mac 의 불일치 때문에 tail -n +43 dump.sql > dump.sql형식 을 사용하기로 결정했습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.