- awk와 sed의 차이점은 무엇입니까?
- sed 및 awk 도구에 가장 적합한 사용 사례는 무엇입니까?
답변
sed
스트림 편집기입니다. 행 단위로 문자 스트림과 함께 작동합니다. 여기에는 Goto 스타일 루프와 간단한 조건부 (패턴 일치 및 주소 일치)가 포함 된 기본 프로그래밍 언어가 있습니다. 본질적으로 패턴 공간과 홀드 공간이라는 두 가지 “변수”만 있습니다. 스크립트의 가독성이 어려울 수 있습니다. 수학 연산은 매우 어색합니다.
sed
명령 행 옵션 및 언어 기능에 대한 지원 레벨이 다른 다양한 버전이 있습니다.
awk
라인 단위로 구분 된 필드를 지향합니다. 그것은 포함 더 강력한 프로그래밍 구조 보유 if
/ else
, while
, do
/ while
및 for
(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
텍스트 (파일)로만 무언가를 검색 / 추출하려는 경우 사용