programing

Perl, Python, AWK 및 sed의 차이점은 무엇입니까?

copyandpastes 2022. 9. 25. 22:26
반응형

Perl, Python, AWK 및 sed의 차이점은 무엇입니까?

그들 사이의 주요 차이점은 무엇입니까?그리고 각 언어를 사용하는 것이 좋은 전형적인 시나리오는 무엇입니까?

외관순서상 언어들은sed,awk,perl,python.

sedprogram은 스트림에디터이며 스크립트로부터의 액션을 입력 파일의 각 행(또는 지정된 행 범위)에 적용하도록 설계되어 있습니다.그 언어의 기초는ed, Unix 에디터 등, 조건이 붙어 있습니다만, 복잡한 작업에는 사용하기 어렵습니다.당신은 그것으로 사소한 기적을 할 수 있지만, 당신의 머리털에 대한 대가를 치르게 된다.하지만, 그것은 아마도 소관에서 작업을 시도할 때 프로그램 중 가장 빠를 것입니다.(논의된 프로그램 중 가장 파워풀한 정규 표현을 가지고 있습니다.다양한 목적에 적합하지만 PCRE - Perl-Compatible 정규 표현은 아닙니다.)

awk프로그램(저작자 Aho, Weinberger 및 Kernighan의 이니셜에서 따온 이름)은 처음에는 보고서 형식을 지정하는 도구입니다.보충용으로도 쓸 수 있다sed최신 버전에서는 계산적으로 완전합니다.이 프로그램은 '패턴 매칭'과 '패턴 매칭 시 취한 액션'을 기반으로 합니다.패턴은 상당히 강력합니다(확장 정규 표현).액션의 언어는 C와 비슷합니다.의 주요 기능 중 하나awk입력은 레코드로 자동 분할되고 각 레코드는 필드로 분할됩니다.

Perl은 부분적으로 awk-killer와 sed-killer로 쓰여졌다.함께 제공되는 프로그램 중 두 가지는 다음과 같습니다.a2p그리고.s2p변환용awk스크립트 및sed스크립트를 Perl로 변환합니다.Perl은 차세대 스크립트 언어 중 가장 오래된 언어 중 하나입니다(Tcl/Tk는 아마도 primacy를 주장할 수 있습니다).강력한 정규 표현 처리와 훨씬 더 강력한 언어를 통합합니다.이는 거의 모든 시스템콜에 대한 접근을 제공하며 CPAN 모듈의 확장성을 갖추고 있습니다.(둘 다)awk도 아니다sed확장 가능합니다.)Perl의 모토 중 하나는 "TMTOWTDI - 여러 가지 방법이 있다"(tim-toady로 발음)입니다.Perl에는 '객체'가 있지만 언어의 기본이라기보다는 애드온에 가깝다.

Python은 마지막으로 작성되었으며 Perl에 대한 반응으로 일부 작성되었을 것입니다.여기에는 몇 가지 흥미로운 구문적 아이디어가 있습니다(수준을 나타내도록 유도함 - 괄호 또는 동등한 것 없음).기본적으로는 Perl보다 객체 지향적이며 Perl과 마찬가지로 확장 가능합니다.

OK - 각각 언제 사용합니까?

  • SED - 파일에서 간단한 텍스트 변환을 수행해야 하는 경우.
  • Awk - 데이터의 단순한 포맷, 요약 또는 변환만 필요한 경우.
  • Perl - 거의 모든 작업에 사용할 수 있지만 특히 복잡한 정규식이 필요한 작업에 적합합니다.
  • Python - Perl을 사용할 수 있는 동일한 작업에 사용됩니다.

Python이 할 수 없는 Perl이 할 수 있는 것은 아무것도 모릅니다.또 그 반대도 마찬가지입니다.둘 중 하나는 다른 요인에 의해 결정될 것이다.Python이 있기 전에 Perl을 배웠기 때문에 사용하는 경향이 있습니다.Python은 구문 접근성이 적고 일반적으로 학습이 다소 간단하다.Perl 6이 출시되면 매우 흥미로운 개발이 될 것입니다.

(특히 Perl과 Python의 '개요'는 비참할 정도로 불완전하다는 점에 유의하십시오.이 주제에 관한 책 전체가 쓰여질 수 있습니다.)

수십 개의 언어를 익히고 나면, S와 같은 사람들에게 싫증이 납니다.로트(이 질문에 대한 논란이 많은 답변 참조, 답변 후 6년 후 (+45/-22) 증가의 절반에 가까운 낮은 투표율).

Sed는 매우 단순한 명령줄 파이프라인에 가장 적합한 도구입니다.sed master의 손에 의해, 이것은 임의의 복잡성의 일회성에 적합하지만, 매우 단순한 대체 파이프라인 이외에는 프로덕션 코드에 사용되어서는 안 됩니다.이런 거.

Gawk(GNU awk)는 단일 입력 소스와 단일 출력(또는 여러 출력이 순차적으로 기록됨)이 있는 경우 복잡한 데이터 재포맷에 가장 적합합니다.많은 실제 작업이 이 설명과 일치하며, 훌륭한 프로그래머는 두 시간 안에 가크를 배울 수 있기 때문에, 그것은 최고의 선택이다.이 행성에서는 단순하고 빠른 것이 더 좋습니다!

입력/출력 시나리오가 매우 복잡할 경우 Perl 또는 Python은 awk 또는 sed의 어떤 버전보다 훨씬 좋습니다.문제가 복잡할수록 유지 보수 및 가독성 측면에서 python을 사용하는 것이 좋습니다.단, 좋은 프로그래머는 어떤 언어로든 읽을 수 있는 코드를 쓸 수 있고, 나쁜 프로그래머는 어떤 유용한 언어로든 유지보수가 불가능한 쓰레기를 쓸 수 있기 때문에 해당 프로그래머가 숙련되고 영리하다면 펄이나 파이썬의 선택은 안전하게 프로그래머의 취향에 맡겨질 수 있습니다.

sed는 완전한 프로그래밍 언어라고는 할 수 없지만 텍스트 파일을 프로그래밍 방식으로 편집하는 것을 목적으로 하는 언어 구조를 가진 스트림 에디터입니다.

Awk는 범용 언어에 가깝지만 여전히 텍스트 처리에 가장 적합합니다.

Perl과 Python은 완전히 새로운 범용 프로그래밍 언어입니다.Perl은 텍스트 처리에 뿌리를 두고 있으며 다수의 awk-like constructure를 가지고 있습니다(인터넷상에 awk-to-perl 스크립트가 떠다니기도 합니다).Perl과 Python 사이에는 많은 차이점이 있습니다.가장 좋은 방법은 아마도 Wikipedia와 같은 곳에서 두 언어의 요약을 읽고 그것들이 무엇인지 잘 이해하는 것입니다.

첫째, 목록에는 Perl, Python awk 및 sed와 관련이 없는 두 가지가 있습니다.

사물 1 - 단순한 텍스트 조작 도구.

  • sed. 그것은 파일의 각 줄을 읽고 검사하는 아이디어에 의해 정의된 고정적이고 비교적 단순한 작업 범위를 가지고 있다. sed는 특별히 읽을 수 있도록 설계되지 않았다.매우 작고 매우 작은 UNIX 서버에서 매우 효율적이도록 설계되었습니다.

  • 아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아아악단, awk 프로그램의 메인 루프는 소스 파일의 행을 암묵적으로 읽어냄으로써 정의된다.

이들은 완전한 프로그래밍 언어가 아닙니다.작업 중에는 꽤 정교한 프로그램을 작성할 수 있지만, 순식간에 복잡하고 읽기 어려워집니다.

사물 2 - 일반적인 목적의 프로그래밍 언어여기에는 풍부한 문형, 다수의 내장 데이터 구조, 유선 접속 전제 조건이나 단축키가 포함되어 있지 않습니다.

  • 파이썬.

언제 사용할지.

  • 진정제, 절대 안 돼요32K 이상의 메모리를 탑재한 현대 컴퓨터 시대에는 전혀 가치가 없습니다.Perl 또는 Python은 동일한 작업을 더 명확하게 수행합니다.

  • 절대 안 돼SED와 마찬가지로 컴퓨팅의 초기 시대를 반영하고 있습니다.이 언어를 유지하는 것보다(성공적인 시스템에 필요한 다른 모든 언어 외에도) 모든 것을 하나의 즐거운 언어로 하는 것이 더 즐겁습니다.

  • 펄. 어떤 종류의 프로그래밍 문제라도.같은 일을 할 수 있는 많은 방법이 있는 자유로운 사고 구문을 좋아한다면 perl은 재미있습니다.

  • Python. 어떤 종류의 프로그래밍 문제라도.상당히 제한된 구문을 원하는 경우 선택지가 적고 섬세하지 않으며 명확성이 향상될 수 있습니다.Python의 객체 지향적인 특성으로 인해 크고 복잡한 문제에 더욱 적합합니다.

배경 - 저는 무지에서 sed와 awak을 때리는 것이 아닙니다.나는 20년 전에 awk를 배웠다.핵심 유닉스 기술로서 많은 것을 가르쳐 왔습니다.나는 Perl을 15년 전에 배웠다.그것으로 많은 정교한 일들을 했다.Python에서도 같은 작업을 할 수 있기 때문에 둘 다 남겼습니다.그리고 더 간단하고 명확합니다.

sed와 awk에는 두 가지 심각한 문제가 있는데 둘 다 그들의 나이가 아니다.

  1. 구현의 불완전성.sed와 awk가 하는 모든 작업은 Python이나 Perl에서 실행할 수 있으며, 종종 더 단순하고 때로는 더 빠릅니다.셸 파이프라인은 멀티 프로세싱으로 인해 몇 가지 성능상의 이점이 있습니다.Python이 제공하는 것은subprocess모듈을 사용하여 이러한 장점을 회복할 수 있습니다.

  2. 또 다른 언어를 배울 필요성.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로 유지됩니다.원래 언어에서 효율이 떨어진다고 해서 다른 언어로 다시 쓰는 것은 아닙니다.

언급URL : https://stackoverflow.com/questions/366980/what-are-the-differences-between-perl-python-awk-and-sed

반응형