일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- FOR
- input
- createElement
- const
- htmlFor
- 학습법 #집중력
- Openlayers
- Let
- VAR
- Append
- appendChild
- createtextnode
- boolean
- Today
- Total
Atomic Habits
[리눅스] perl을 이용한 치환 (빠른 편) 본문
- 파일 내용 치환 replace (빠른 편) : sed 's///g' 느림
$ perl -pi -e 's/\\//g' t3.txt
$ perl -pi -e 's/\\//g' t1.txt t2.txt : 2개 파일 동시에 수행 ( (원화사인) \ 만 찾을 경우 \\를 입력 )
$ perl -pi -e 's/\\//g' *.txt : .txt 파일 모두 변경
- 현재 디렉토리에 존재하는 모든 파일들에 대해 OLDSTRING 문자열을 NEWSTRING 문자열로 치환한다.
1
|
% find ./ -name "*" -exec perl -p -i -e 's/OLDSTRING/NEWSTRING/g' {} \;
|
- 파일 내용 찾기 grep
$ grep -i --color -n '문자열' *.txt ( '문자열' , "문자열" 모두 가능 )
$ grep -i --color -n '\\' *.txt ( (원화사인) \ 만 찾을 경우 \\를 입력해야 하고, "(불가) '(가능) )
$ grep -i --color -n '\\' t1.txt t2.txt ( 연이어 표기 가능 )
$ grep -c '\\' 문자열" t1.txt t2.txt ( 총 갯수만 파악 )
$ grep -i --color -n -m3 '\\' t1.txt t2.txt ( 각 파일에서 3개 까지만 찾고 검색 중단할 때 )
* 출처 : grep 옵션 보기 https://rfriend.tistory.com/372
- 라인 수 세기 (빠른 편) 23GB - 1분 내 완료
$ wc -l *.txt $ wc -l t1.txt t2.txt
7 t1.txt
8 t2.txt 마지막 개행 파트도 count됨.
15 total
- 특정 단어 수 세기
$ grep -o '\\' *.txt | wc -l
- 특정 단어가 있는 라인 수 세기
$ cat *.txt | grep '\\' | wc -l
여러 파일에서 \(원화사인)이 포함된 라인 수를 출력 -> t1.txt에 3개, t2.txt 에 4개 있으면, 총 개수 7만 출력함.
- 파일 병합 / 합치기 (빠른 편)
$ cat t1.txt t2.txt > t0.txt ※ 파일명이 낮은 순위여야 t0.txt 까지 합치는 과정이 발생하지 않음
출처: https://firstboos.tistory.com/entry/대용량-텍스트-파일-내용-변경하기 [散策 의 정리공간]
대용량 텍스트 파일 내용 변경하기
텍스트 파일 내용중에 일부를 다른 문자열로 치환하기 위해 sed 로 실행해보았다.
텍스트 파일은 12 GB 정도, 서버 : CPU Intel Xeon 2.6 GHz, RAM 4GB
# sed 's/AAA/BBB/g' text > conv_text
실행시간 : 대략 20분에서 30분에서 작업이 종료.
-> sed 자체에서 변경하는 부분이 문제일 수도 있지만, redirect 로 다른 파일로 저장하는 것도 실행 시간에 문제가 되었을 것이다.
perl 을 사용해서 동일한 작업을 수행했다.
# time perl -pe 's/AAA/BBB/g' text
real 6m51.624s
user 1m3.129s
sys 0m42.110s
-> 대략 6,7분 사이에 완료되었다. 백업파일 옵션을 안줘서 그런가해서 다시한번 테스트 해보았다.
# time perl -ibak -pe 's/AAA/BBB/g' text
real 6m45.249s
user 1m4.498s
sys 0m42.332s
-> 시간이 더 적게 나온거는 오차가 있겠지만, "text.bak" 원본파일도 같이 생성되어도 작업이 6,7 분에 완료되었다.
perl 이 대용량 파일처리에 우수하다는 얘기는 들어보았지만 실제 사용하기는 처음인데, 이런 차이가 있을 줄은 몰랐다. perl 을 사용해서 파일 처리 테스트를 많이 적용해 보아야 겠다.
참고 :
출처 : https://javafactory.tistory.com/470
#perl -pi -e 's/원본문자열/바꿀문자열/g' <파일명> (빠른 편)
e 주어진 Perl 명령 실행
p 지정한 파일을 대상으로 작업
i 원본파일을 결과파일로 대체
응용 : html 파일을 찾아 EUC_KR 을 UTF 8로 바꿔보기.
#find ./ -name '*.html' -exec perl -pi -e 's/EUC_KR/UTF-8/g' {} \;
{} <- {} find 에서 찾아낸 검색 결과가 하나씩 들어가는 부분
\; <- -exec 다음부분에 나와있는 명령어 를 실행하라는 부분
$find ./ -name '*.txt' -exec perl -pi -e 's/\\//g' {} \;
$ perl -pi -e 's/\\//g' *.txt
'IT > Linux-Vim' 카테고리의 다른 글
[리눅스] 파일 분할 split (0) | 2021.12.04 |
---|---|
[리눅스] 파일 분할 split (0) | 2021.12.01 |
[Linux] 파일 라인 수 세기 (0) | 2021.12.01 |
[리눅스 명령어] sed : sed 명령어 사용하여 파일 내용 일괄 변경하기 (0) | 2021.12.01 |
[sed] 문자열 치환하기 (0) | 2021.12.01 |