그들 사이의 주요 차이점이 무엇인지 알고 싶습니까? 각 언어의 힘 (사용하는 것이 더 나은 곳).
편집 : "vs"가 아닙니다. 주제와 같은 정보 일뿐입니다.
그들 사이의 주요 차이점이 무엇인지 알고 싶습니까? 각 언어의 힘 (사용하는 것이 더 나은 곳).
편집 : "vs"가 아닙니다. 주제와 같은 정보 일뿐입니다.
답변:
외관 위해, 언어는 sed
, awk
, perl
, python
.
이 sed
프로그램은 스트림 편집기이며 스크립트에서 입력 파일의 각 행 (또는 일반적으로 지정된 행 범위)에 조치를 적용하도록 설계되었습니다. 언어는 ed
Unix 편집기를 기반으로 하며 조건부 등이 있지만 복잡한 작업을 수행하기는 어렵습니다. 사소한 기적을 할 수는 있지만 머리에는 머리카락이 비쌉니다. 그러나, 그것은 송금 내에서 작업을 시도 할 때 아마도 가장 빠른 프로그램 일 것입니다. (이것은 논의 된 프로그램의 가장 강력한 정규 표현식을 가지고 있습니다-많은 목적에 적합하지만 확실히 PCRE는 아닙니다-Perl 호환 정규 표현식)
이 awk
프로그램 (저자 이니셜의 이름-Aho, Weinberger 및 Kernighan)은 처음에 보고서 형식을 지정하는 도구입니다. 수프로 사용할 수 있습니다 sed
. 최신 버전에서는 계산이 완료되었습니다. 흥미로운 아이디어를 사용합니다.이 프로그램은 '패턴 일치'와 '패턴 일치시 취한 조치'를 기반으로합니다. 패턴은 상당히 강력합니다 (확장 정규식). 동작 언어는 C와 비슷합니다. 주요 특징 중 하나 awk
는 입력을 레코드로 자동 분할하고 각 레코드를 필드로 분할한다는 것입니다.
Perl은 부분적으로 awk-killer와 sed-killer로 작성되었습니다. 그것은되어 함께 제공되는 프로그램의 두 a2p
및 s2p
변환 awk
스크립트와 sed
펄에 스크립트를. Perl은 차세대 스크립팅 언어 중 가장 빠른 것 중 하나입니다 (Tcl / Tk가 우선권을 주장 할 수 있음). 훨씬 더 강력한 언어로 강력한 정규식 처리 기능을 통합했습니다. 거의 모든 시스템 호출에 액세스 할 수 있으며 CPAN 모듈의 확장 성이 있습니다. (어느 쪽 awk
도 sed
확장 가능합니다.) 펄의 모토 중 하나는 "TMTOWTDI - 그것을 하나 개 이상의 방법이있다"( "팀-아첨"로 발음). Perl은 '객체'를 가지고 있지만 언어의 기본 부분보다는 추가 기능입니다.
파이썬은 마지막에 쓰여졌으며 아마도 부분적으로 Perl에 대한 반응으로 작성되었습니다. 흥미로운 문법 아이디어가 있습니다 (중괄호 또는 동등한 것이 없음을 나타내는 들여 쓰기). 이것은 Perl보다 근본적으로 객체 지향적입니다. Perl만큼 확장 가능합니다.
좋아-언제 사용합니까?
펄이 할 수없는 일, 파이썬이 할 수없는 일, 그 반대의 일에 대해서는 전혀 모른다. 이 둘 사이의 선택은 다른 요소에 달려 있습니다. 파이썬이 있기 전에 Perl을 배웠으므로 사용하는 경향이 있습니다. 파이썬은 구문이 적고 일반적으로 배우기가 다소 간단합니다. Perl 6이 출시되면 매력적인 개발이 될 것입니다.
(특히 Perl과 Python의 '개요'는 매우 불완전합니다. 전체 책을 주제로 작성할 수 있습니다.)
awk
이상 sed
(모두는 여전히 자신의 용도가 있지만) 학습. 작업의 크기와 관련하여 : sed
한 줄에 한 줄씩 처리 할 때 가장 좋으며 줄마다 저장소가 없습니다. awk
모든 소스에서 축적 된 데이터로 연관 배열을 구축하는 데 종종 사용됩니다. 더 많은 메모리를 사용하므로 대용량 데이터 세트에 문제가 발생할 가능성이 훨씬 높습니다 sed
. 나는 tsawk
당신이 그것에 연결하기 전에 들어 본 적이 없습니다 . 나는 작업이 너무 많을 때 Perl에 빠지는 경향이 있지만 (Python으로 더 잘 할 수있다) awk
.
수십 개의 언어를 습득 한 후, S. Lott와 같은 사람들에 질려 있습니다 (답변 6 년 후이 질문에 대한 그의 논란의 여지가있는 답변, 거의 절반의 다운 투표 수 (+ 45 / -22) 참조).
Sed는 매우 간단한 명령 줄 파이프 라인을위한 최고의 도구입니다. sed master의 손에는 임의의 복잡한 일회성에 적합하지만 매우 간단한 대체 파이프 라인을 제외하고 프로덕션 코드에는 사용해서는 안됩니다. 's / this / that /.'같은 것
Gawk (GNU awk)는 단일 입력 소스와 단일 출력 (또는 여러 출력이 순차적으로 작성 됨)이있을 때 복잡한 데이터 재 포맷에 가장 적합한 선택입니다. 많은 실제 작업이이 설명에 따르고, 좋은 프로그래머는 2 시간 안에 gawk를 배울 수 있으므로 최선의 선택입니다. 이 지구상에서는 간단하고 빠를수록 좋습니다!
입력 / 출력 시나리오가 매우 복잡한 경우 Perl 또는 Python이 awk 또는 sed 버전보다 훨씬 우수합니다. 문제가 복잡할수록 유지 관리 및 가독성 관점에서 파이썬을 사용하는 것이 좋습니다. 그러나 훌륭한 프로그래머는 모든 언어로 읽을 수있는 코드를 작성할 수 있으며, 나쁜 프로그래머는 유용한 언어로 유지 보수 할 수없는 쓰레기를 쓸 수 있으므로 펄이나 파이썬의 선택은 프로그래머가 선호하는 경우 프로그래머의 선호에 안전하게 맡길 수 있습니다 숙련되고 영리합니다.
a?ⁿaⁿ
로 변경 a??ⁿaⁿ
한 다음 Perl 5 ⁿ
에서 1,000,000의 값으로 실행하면 2 초 이내에 실행됩니다. time perl -E '$x=1_000_000;$_="a"x$x;$m=("a??"x$x).("a"x$x);say $_=~$m'
순진한 것을 실행하면 ⁿ
25 초 동안 2 초 이상 걸립니다 .Perl은 Perl 코드보다 더 빠른 정규식 기능을 가지고 있다는 것을 알고 있습니다. . 원하는 경우 내장 모듈을 다른 모듈 중 하나로 교체하는 모듈을 구현할 수 있습니다.
나는 sed를 본격적인 프로그래밍 언어라고 부르지 않을 것이며, 프로그래밍 방식으로 텍스트 파일을 편집하는 것을 목표로하는 언어 구조를 가진 스트림 편집기입니다.
Awk는 좀 더 일반적인 목적 언어이지만 여전히 텍스트 처리에 가장 적합합니다.
Perl과 Python은 본격적인 범용 프로그래밍 언어입니다. Perl은 텍스트 처리에 뿌리를두고 있으며 여러 가지 awk와 유사한 구조를 가지고 있습니다 (넷에 흩어져있는 awk-to-perl 스크립트도 있습니다). Perl과 Python에는 많은 차이점이 있습니다. 가장 좋은 방법은 Wikipedia와 같은 언어로 두 언어의 요약을 읽고 내용을 잘 이해하는 것입니다.
먼저, "Perl, Python awk 및 sed"목록에 관련이없는 두 가지가 있습니다.
일 1-단순한 텍스트 조작 도구.
sed. 파일의 각 줄을 읽고 검사한다는 개념으로 정의 된 비교적 간단한 작업 범위를 갖습니다. sed는 특히 읽을 수 있도록 설계되지 않았습니다. 매우 작은 유닉스 서버에서 매우 작고 효율적으로 설계되었습니다.
어 wk. 약간 덜 고정되고 덜 간단한 작업 범위가 있습니다. 그러나 awk 프로그램의 메인 루프는 소스 파일의 행을 암시 적으로 읽는 것으로 정의됩니다.
이들은 "완전한"프로그래밍 언어가 아닙니다. 약간의 작업으로 상당히 정교한 프로그램을 쓸 수는 있지만 빠르게 복잡하고 읽기가 어렵습니다.
일 2-범용 프로그래밍 언어. 여기에는 다양한 문장 유형, 수많은 내장 데이터 구조가 있으며 유선 가정이나 단축 법이 없습니다.
펄.
파이썬.
사용시기
sed. 못. 실제로 32K 이상의 메모리를 가진 컴퓨터의 시대에는 아무런 가치가 없습니다. Perl 또는 Python은 동일한 작업을보다 명확하게 수행합니다.
어 wk. 못. sed와 마찬가지로, 그것은 초기 컴퓨팅 시대를 반영합니다. 성공적인 시스템에 필요한 다른 모든 언어 외에도이 언어를 유지하기보다는 모든 것을 한 가지 쾌적한 언어로하는 것이 더 즐겁습니다.
펄. 모든 종류의 프로그래밍 문제. 똑같은 일을하는 많은 방법이 많은 자유 생각 구문을 좋아한다면, 펄은 재미있다.
파이썬. 모든 종류의 프로그래밍 문제. 선택의 폭이 좁고 미묘함이 적고 명확성이 더 높은 구문이 상당히 제한되어있는 경우. 파이썬의 객체 지향적 특성은 크고 복잡한 문제에 더 적합합니다.
배경-나는 sed를 강타하지 않고 무지에서 벗어납니다. 나는 20 년 전에 awk를 배웠다. 그것으로 많은 일을했다; 핵심 유닉스 기술로 가르치는 데 사용됩니다. 나는 약 15 년 전에 펄을 배웠다. 그것으로 많은 정교한 것들을 했어. 파이썬에서 똑같은 일을 할 수 있기 때문에 두 가지를 모두 남겨 두었습니다. 더 간단하고 명확합니다.
sed와 awk에는 두 가지 심각한 문제가 있으며 그중 어느 것도 나이가 아닙니다.
그들의 구현의 불완전 성. sed와 awk가 수행하는 모든 작업은 Python 또는 Perl에서 수행 할 수 있으며 종종 더 간단하고 때로는 더 빠릅니다. 셸 파이프 라인은 다중 처리로 인해 몇 가지 성능 이점이 있습니다. 파이썬은 subprocess
이러한 장점을 복구 할 수 있는 모듈을 제공합니다 .
또 다른 언어를 배울 필요가 있습니다. Python (또는 Perl)에서 작업을 수행하면 구현이 더 적은 언어에 의존하여 결과의 선명도가 높아집니다.
사용시기 : awk-never-S. Lott.
나는 S. Lott이이 추천으로 그 마크를 약간 놓쳤다 고 생각합니다. 사실 Linux 및 기타 UNIX 환경에서 awk는 빠른 텍스트 처리를 위해 bash, sh 및 ksh와 함께 사용할 수있는 유용한 도구입니다. 스크립팅 자체의 아이디어는이 도구 인 해당 도구를 함께 붙여서 문제를 해결하는 것입니다. 따라서 관리자 스크립트에서는 ls, grep, |, awk, time, ps 등이있는 것이 일반적입니다. 각각은 스크립터가 빌더 벽돌처럼 벽돌로 결합하여 건물을 완성하는 도구입니다 (당면한 문제를 해결하기 위해) .
예를 들어 페인트 볼 기어 용품을 관리하는 팀의 팀원입니다.닷컴. 이 전자 상거래 사이트는 LAMP 스택을 기반으로합니다. 다양한 공급 업체에서 백엔드 데이터베이스로의 데이터 피드를 자동으로 처리하고 정규화하기 위해 bash, perl, php 등의 다양한 스크립트 조합을 사용하고 유지합니다. 각 모듈은 사용 가능한 모듈과 API를 기반으로합니다. bash 스크립트에서는 PERL로 전환 할 필요없이 awk를 사용하여 필요한 패턴에 대한 빠른 패턴 일치 및 적절한 조치를 수행합니다. 스레드에서 강조하지 않은 한 가지 주목할 점은 상당수의 스크립트를 구매했거나 공개 소스에서 얻은 것입니다. 스크립트가 Perl로 온 경우, 우리는 Perl로 유지합니다. 스크립트가 Php로 온 경우, 우리는 Php로 유지합니다. bash로 온 경우 bash로 유지합니다.
ls
말고 glob를 대신 사용하십시오. 이것을 읽으십시오.