리눅스 머신에 거대한 일반 텍스트 파일 (~ 500Gb)이 있습니다. 헤더 행 (파일의 첫 번째 행)에서 일부 문자열을 바꾸기를 원하지만 모든 방법이 느리고 효율이 낮은 것으로 보입니다.가장 빠른 방법은 리눅스 명령 줄에서 거대한 파일의 첫 번째 행에 문자열을 교체하려면?
예시 파일 :
foo apple cat
1 2 2
2 3 4
3 4 6
...
예상 파일 출력 :을 나오지
bar apple cat
1 2 2
2 3 4
3 4 6
...
:
sed -i '1s/foo/bar/g' file
-i
캔 C 파일을 제 위치에 배치하지만이 명령은 디스크에 tmp 파일을 생성하고 원래 파일을 대체하기 위해 tmp 파일을 사용합니다. io 낭비 시간.
정력 :
ex -c '1s/foo/bar/g' -c 'wq' file
정력이 tmp 파일을 생성하지 않지만,이 도구 중 많은 시간을 낭비 메모리에 전체 파일을로드합니다.
첫 번째 행을 메모리로 읽어 와서 원래 파일에 다시 쓰는 것이 더 나은 해결책이 있습니까? 나는 리눅스가 head
명령은 첫 번째 열을 매우 빨리 추출 할 수있는 것으로 알고 있습니다.
샘플 입력과 원하는 출력을 원하는 질문에 추가하십시오. – Cyrus
이것은'foo'와'bar'가 같은 길이 (바이트 단위) 인 경우에만 할 수 있습니다. 그렇지 않으면 전체 파일을 다시 작성하는 것이 유일한 옵션입니다 (도구가 충분히 똑똑하면 그대로 수행 할 수 있습니다). – Thomas
@cyrus 예제를 추가했습니다. –