반응형
Unix 쉘 명령을 사용하여 텍스트 파일에서 새 파일로 상위 1000 개 행 이동
5 천만 개 이상의 항목이 포함 된 텍스트 파일의 상위 1000 개 행을 다른 새 파일로 복사하고 원본 파일에서도이 행을 삭제하고 싶습니다.
Unix에서 단일 셸 명령으로 동일한 작업을 수행 할 수있는 방법이 있습니까?
head -1000 input > output && sed -i '1,+999d' input
예를 들면 :
$ cat input
1
2
3
4
5
6
$ head -3 input > output && sed -i '1,+2d' input
$ cat input
4
5
6
$ cat output
1
2
3
head -1000 file.txt > first100lines.txt
tail --lines=+1001 file.txt > restoffile.txt
호기심에서 나는 GNU 버전 sed
(v4.1.5)이 있는 상자를 발견하고 11M 줄 텍스트 파일을 사용하여 지금까지 제안 된 두 가지 접근 방식의 (캐시되지 않은) 성능을 테스트했습니다.
$ wc -l input
11771722 input
$ time head -1000 input > output; time tail -n +1000 input > input.tmp; time cp input.tmp input; time rm input.tmp
real 0m1.165s
user 0m0.030s
sys 0m1.130s
real 0m1.256s
user 0m0.062s
sys 0m1.162s
real 0m4.433s
user 0m0.033s
sys 0m1.282s
real 0m6.897s
user 0m0.000s
sys 0m0.159s
$ time head -1000 input > output && time sed -i '1,+999d' input
real 0m0.121s
user 0m0.000s
sys 0m0.121s
real 0m26.944s
user 0m0.227s
sys 0m26.624s
이것은 내가 함께 일하고 있던 Linux입니다.
$ uname -a
Linux hostname 2.6.18-128.1.1.el5 #1 SMP Mon Jan 26 13:58:24 EST 2009 x86_64 x86_64 x86_64 GNU/Linux
이 테스트의 경우 적어도 접근 방식 sed
보다 느린 것 같습니다 tail
(27 초 대 ~ 14 초).
이것은 한 줄이지 만 네 가지 원자 명령을 사용합니다.
head -1000 file.txt > newfile.txt; tail +1000 file.txt > file.txt.tmp; cp file.txt.tmp file.txt; rm file.txt.tmp
Perl 접근 방식 :
perl -ne 'if($i<1000) { print; } else { print STDERR;}; $i++;' in 1> in.new 2> out && mv in.new in
파이프 사용 :
cat en-tl.100.en | head -10
ReferenceURL : https://stackoverflow.com/questions/801004/move-top-1000-lines-from-text-file-to-a-new-file-using-unix-shell-commands
반응형
'Programing' 카테고리의 다른 글
Firebase 저장소 및 Access-Control-Allow-Origin (0) | 2021.01.11 |
---|---|
젠킨스 파이프 라인에 파일이 있는지 확인 (0) | 2021.01.11 |
Apple Interface Builder : UIImageView에 하위보기 추가 (0) | 2021.01.11 |
콘텐츠로 HTML5 캔버스 요소를 복제하는 방법은 없나요? (0) | 2021.01.11 |
Python의 unittest로 경고가 발생했는지 테스트하는 방법은 무엇입니까? (0) | 2021.01.11 |