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


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

2
unix.stackexchange에 대한 관련 QA : grep, awk 및 sed에 대한 기본 자습서가 있습니까?
Dani

답변:


549

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

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


7
의 경계를 밀어의 몇 가지 예를 참조하십시오 sed: sed.sourceforge.net/#scripts
추후 공지가있을 때까지 일시 중지합니다.

@DennisWilliamson-awk 만 배우면 불리한가요? awk가 sed보다 훨씬 일반적으로 사용됩니까?
Steam

4
@ blasto : 내 추천은 둘 다 배우는 것이지만 awk에 더 중점을 둡니다. 많은 정규 표현식은 (및 다른 도구와 언어) 모두에 적용됩니다. 더 간단한 것을 위해 sed를 사용하고 복잡한 것을 피하십시오. sed에서 루프와 분기를 수행 할 수 있다는 것은 정말 멋진 일이지만 결과 명령 줄은 복잡하고 읽기 어렵습니다. 질문에 대한 답은 실제로하고있는 일에 달려 있습니다.
추후 공지가있을 때까지 일시 중지되었습니다.

@DennisWilliamson-ETL 개발자에게 가장 유용한 것은 무엇입니까? ETL 또는 추출 변환 및로드는 데이터웨어 하우징 용어입니다. 간단히 말해, 작업에는 서로 다른 이종 소스 (DB, Excel 파일, csv 파일 등)의 데이터 추출, 동일한 변환 후 데이터웨어 하우스 (DW)에로드하여 분석, 데이터에서 패턴 찾기 또는 과거 기록이 포함됩니다. 기록. 예. DW의 최종 사용-지난 10 년 동안의 데이터가있는 식료품 점의 DW에 적용된 알고리즘은 사과를 사는 경향이있는 사람들도 오렌지 나 그와 유사한 것을 구입한다는 것을 보여줄 수 있습니다.
Steam

1
Mac에서 이것을 우연히 만난 사람은 참고로 첫 번째 sed 예제에서 "sed -E 's /-([0-9] +. [0-9] *) / (\ 1) / g'"
Daniel Schmidt

124

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

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

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

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


7
학습 곡선에 대한 좋은 점. 너무 많은 도구가
섞일

174
^^ 충분한 sed. (죄송합니다.)
Greg M. Krsak

8
나는 sed가 배우기가 훨씬 쉽다는 것을 알았으므로 그 점을 고려해야합니다. awk를 습득하는 법을 배우면서 sed를 빨리 배우면 awk에서 어떻게 해야할지 모르는 일에 더 빨리 사용할 수 있습니다.
Didier A.

1
@GregKrsak 당신은 내 하루를 만들었습니다. (죄송합니다.)
Abel Callejo

15
도랑하지 마십시오 sed, 's/search/replace'보다 입력하는 방법을 쉽게 awk의 구문과 당신이 가장 많은 시간을 필요로합니다.
sjas

54

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.