큰 텍스트 파일의 첫 줄 편집


16

모든 것이 메모리에 페이징 되기에는 너무 큰 텍스트 파일이 있습니다. 이 텍스트 파일과 관련된 모든 것은 첫 번째 줄을 편집하는 것입니다 (CSV 파일이므로 제목을 변경해야합니다).

bash에서 이것을 할 수있는 간단한 방법이 있습니까?


텍스트 편집기를 사용할 수없는 이유가 있습니까?
dangph

파일이 너무 커서이 컴퓨터의 최대 가상 메모리보다 20 배 이상 큽니다.
Lynks

1
그럴 수 있지. 훌륭한 텍스트 편집기는 메모리에 필요한만큼만로드하기 때문에 매우 큰 파일을 처리 할 수 ​​있다는 인상을 받았지만 다른 질문을 읽은 후에는 대부분 문제가있는 것 같습니다.
dangph

@dangph True ...는 이상 할 수 있지만 edlinms-dos 또는 edUnix 와 같이 오래되고 쓸모없는 "텍스트 편집기"(또는 소위) 는이 문제가없는 것처럼 보이지만 라인 편집기 만있는 곳 ... 이 시대는 드물고 귀중한 것이 었으며 기가 바이트의 파일 크기는 믿을 수 없었습니다! ;)
laurent December

일을 분명히하기 위해;) : 나는 놓치지 마세요 ed! 그러나이 경우에는 적합합니다 (이 크기의 파일을 처리 할 수 ​​있는지 확실하지 않습니다 ...)
laurent

답변:


22

당신이 사용할 수있는 less편집 할 및 사용을 확인하려면 sed변경을 할 수 있습니다. 이렇게하면 전체 파일을로드하지 않고 편집 할 수 있습니다.

다른 방법은 파일을 분할하고 편집하고 다시 결합하는 것입니다.

split -b 10000k <file>

and to join:

cat xa* > <file>

sed에 대한 공감.
atroon December

환상적인 분할 및 조인은 내가 찾던 것과 정확히 일치했습니다.
lynks

sed는 전체 파일을 쉽게 검색 / 교체 할 수 있기 때문에 sed가 더 좋지만 첫 번째 줄만 변경하면 split도 나쁘지 않습니다.
laurent December

4
sed는 전체 파일 (TB의 절반 미만)을 실행하는 데 몇 시간이 걸렸으며 변경 사항은 첫 번째 줄에만 있었으며 분리하는 것이 합리적이었습니다.
lynks

3

수정으로 줄 길이가 변경되면 전체 파일을 다시 작성해야합니다 (예 : SO에 대한 이 설명 참조) . 데이터를 데이터베이스에 저장하는 것을 고려해야합니다.

이를 염두에두고 sed를 사용하여 파일을 스트림 편집 할 수 있습니다. 첫 번째 줄을 바꾸려면 다음과 같이하십시오 (GNU sed).

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