2016-11-04 1 views
1

매우 큰 파일 (> 5G)을 가지고 있으며 줄 번호 으로 일부 줄을 이동 (복사 및 붙여 넣기)하지 않고 제거하려고합니다. 파일.linux 명령을 사용하여 큰 파일 (> 5G)의 특정 줄을 제거하는 방법

이 명령은 작은 크기의 파일에서 작동합니다. (내 sed 명령은 -i 옵션을 인식하지 못합니다)

sed "${line}d" file.txt > file.tmp && mv file.tmp file.txt 

이 명령은 크기 때문에 비교적 오랜 시간이 걸립니다. 첫 번째 줄과 마지막 줄을 지우고 줄 번호 n을 제거하는 방법을 알고 싶을뿐입니다.

+0

여기에 문제가 무엇입니까 sed '1d;$d' test.txt을 사용할 수 있습니다 사용하여 모든 (첫 번째와 마지막 줄을 삭제, 쓰기 및 종료)

echo -e '1d\n$d\nwq' | ed -s test.txt 

을 할 것인가? 이 작업의 시간 또는 파티션에 공간이 없습니까? – DevilaN

답변

0

파일이 표준 파일 시스템 (NTFS, EXTFS, ...)에 저장되는 방식 때문에 파일의 일부를 제거 할 수 없습니다. 이 자리에서 할 수있는

유일한 것은

  • 는 파일에 데이터를 수정 (모드 추가) 파일의 끝에 추가입니다 (읽기 - 쓰기 모드)

다른 작업은 파일을 완전히 읽고 수정 된 내용을 다시 쓰려면 임시 파일이나 임시 메모리를 사용해야합니다.

EDIT : C 프로그램을 사용하여 here 읽기 파일을 "축소"할 수도 있습니다. 즉, 마지막 줄은 제거 할 수 있습니다 (즉, 첫 번째 줄이나 중간의 줄은 삭제할 수 없음을 의미합니다). 당신은 최근 리눅스를 사용하는 경우)

+0

삭제하겠습니까? 삭제하려는 행이 첫 행이거나 마지막 행인 경우 어떻게할까요? 파일의 시작 또는 끝 부분에 포인터 (또는 동등한 메타 정보)를 이동하여 파일 시스템의 파일을 축소하는 방법이 있습니까? –

+0

내 편집을 참조하십시오. 어쩌면 포인터를 이동하여 파일의 시작 부분을 제거 할 수 있지만 디스크 블록 (슈퍼 유저 + 슈퍼 위험한 :)을 편집해야합니다. –

0

당신은

ed -s file.text 

요 나오지도 매우 유사하다 ed 명령을 사용할 수 있습니다 d 명령을 사용할 수 있습니다. 은 마지막 행을 삭제하고 1d은 첫 번째 행을 삭제하고 wq은 쓰고 종료합니다.

다음 명령은 sed이 같은 명령

관련 문제