[sed] sed와 awk의 차이점은 무엇입니까? [닫은]

  • awk와 sed의 차이점은 무엇입니까?
  • sed 및 awk 도구에 가장 적합한 사용 사례는 무엇입니까?


답변

sed스트림 편집기입니다. 행 단위로 문자 스트림과 함께 작동합니다. 여기에는 Goto 스타일 루프와 간단한 조건부 (패턴 일치 및 주소 일치)가 포함 된 기본 프로그래밍 언어가 있습니다. 본질적으로 패턴 공간과 홀드 공간이라는 두 가지 “변수”만 있습니다. 스크립트의 가독성이 어려울 수 있습니다. 수학 연산은 매우 어색합니다.

sed명령 행 옵션 및 언어 기능에 대한 지원 레벨이 다른 다양한 버전이 있습니다.

awk라인 단위로 구분 된 필드를 지향합니다. 그것은 포함 더 강력한 프로그래밍 구조 보유 if/ else, while, do/ whilefor(C 스타일 및 배열을 반복). 변수 및 단일 차원 연관 배열 및 (IMO) kludgey 다차원 배열을 완벽하게 지원합니다. 수학 연산은 C의 연산과 유사 printf합니다. “AWK”에있는 “K”가 “의 약자 K의 “커니 핸 및 리치 “책의”C 프로그래밍 언어 “명성 같이 ernighan”(잊지하지 호 및 W einberger을). 을 사용하여 학술 표절 탐지기를 작성할 수 있습니다.awk

GNU awk( gawk)에는 최신 버전의 진정한 다차원 배열을 포함하여 다양한 확장 기능이 있습니다. 다른 변화가있다 awk을 포함 mawk하고 nawk.

두 프로그램 모두 텍스트 선택 및 처리에 정규식을 사용합니다.

sed텍스트에 패턴이있는 곳에 사용하는 경향이 있습니다 . 예를 들어, 일부 텍스트에서 “빼기 기호 뒤에 일련의 숫자”(예 : “-231.45”) 형식의 모든 음수를 “회계사 괄호”형식 (예 : “(231.45)”으로 바꿀 수 있습니다. ) 이것을 사용하여 (개선의 여지가 있음) :

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

내가 사용하는 것이 awk텍스트가 더 행과 열 또는처럼 보이는 경우, 같은 awk“기록”과 “필드를”그들에게 말한다. 위와 비슷한 작업을 수행하려고하지만 간단한 쉼표로 구분 된 파일의 세 번째 필드에서만 다음과 같은 작업을 수행 할 수 있습니다.

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

물론 이것들은 각각 제공해야 할 모든 기능을 설명하지 않는 매우 간단한 예일뿐입니다.


답변

1) awk와 sed의 차이점은 무엇입니까?

둘 다 텍스트를 변형시키는 도구입니다. 그러나 awk는 텍스트를 조작하는 것 외에도 더 많은 일을 할 수 있습니다. 배열, 루프, if / else 흐름 제어 등과 같이 프로그래밍에서 배운 대부분의 내용이 포함 된 프로그래밍 언어 자체로 sed에서 “프로그래밍”할 수는 있지만 작성된 코드는 유지하고 싶지 않습니다. .

2) sed 및 awk 도구에 가장 적합한 용도는 무엇입니까?

결론 : 매우 간단한 텍스트 구문 분석에는 sed를 사용하십시오. 그 이상은 awk가 더 좋습니다. 사실, sed를 완전히 버리고 awk를 사용할 수 있습니다. 함수가 겹치고 awk가 더 많은 일을 할 수 있으므로 awk를 사용하십시오. 학습 곡선도 줄어 듭니다.


답변

두 도구 모두 텍스트 작업을위한 것이며 두 도구를 모두 사용할 수있는 작업이 있습니다.

나에게 그것들을 분리하는 규칙은 다음과 같습니다 sed. 텍스트 편집기에서 수동으로 수행하는 작업을 자동화하는 데 사용하십시오 . 이것이 스트림 편집기 라고하는 이유 입니다. vim에서 동일한 명령을 사용하여 텍스트를 편집 할 수 있습니다. awk계산 필드를 의미하고 총계를 계산하고 구조를 추출 및 재구성하는 등의 텍스트를 분석하려는 경우에 사용하십시오 .

또한 잊지 말아야 grep합니다. grep텍스트 (파일)로만 무언가를 검색 / 추출하려는 경우 사용


답변