문제

나는 문제에 대한 올바른 솔루션을 사용하는 것을 좋아하기 때문에 구식 도구라도 계속해서 새로운 도구를 배우고 있습니다.

그럼에도 불구하고 아직도 그 중 일부를 배워야 할 이유가 있는지 궁금합니다. awk 예를 들어 나에게는 흥미롭지만 간단한 텍스트 처리를 위해 다음을 사용할 수 있습니다. grep, cut, sed, 등.복잡한 것에는 Python을 선택하겠습니다.

이것이 강력하고 편리한 도구가 아니라는 뜻은 아닙니다.하지만 새로운 도구를 배우려면 시간과 에너지가 필요하기 때문에 그만한 가치가 있나요? ?

도움이 되었습니까?

해결책

자신이 처한 환경에 따라 다르다고 생각합니다.당신이 *nix 사람이라면, awk 좋은 일입니다.거의 모든 *nix에서 찾을 수 있는 유일한 스크립팅 환경은 다음과 같습니다. sh.그래서 동안 grep, sed, 등은 확실히 대체 할 수 있습니다 awk 현대 주류에 linux distro, 좀 더 이국적인 시스템으로 이동할 때 조금 알고 있으면 awk Real Handy가 될 것입니다.

awk 단순한 텍스트 처리 이상의 용도로도 사용할 수 있습니다.예를 들어 내 감독자 중 한 명이 천문학 코드를 작성합니다. awk - 완전 그렇군요 오래된 학교 그리고 엄청난 그는.그 당시에는 작업을 위한 최고의 도구였습니다...이제 나 같은 그의 학생들은 Python을 사용하고 그렇지 않은 것을 사용하더라도 그는 자신이 아는 것을 고수하고 잘 작동합니다.

마지막으로, 세상에는 약간만 아는 오래된 코드가 많이 있습니다. awk 아프지 않을 것입니다.그것은 또한 당신을 더 좋게 만들 것입니다 *nix person :-)

다른 팁

awk의 기본 사항을 빠르게 배우면 실제로 명령줄에서 놀라운 작업을 수행할 수 있습니다.

하지만 진짜 awk를 배우는 이유는 awk를 읽을 핑계를 갖기 위해서입니다. 훌륭한AWK 프로그래밍 언어 저자 Aho, Kernighan 및 Weinberger가 작성했습니다.이름만 보면 단순히 잘못된 것을 가르쳐준다고 생각할 수도 있습니다.사실 그것은 시작에 불과합니다.문자열 조작을 쉽게 만드는 간결한 스크립팅 언어를 사용하면 해결할 수 있는 광범위한 문제를 시작하고(awk는 첫 번째 언어 중 하나였습니다) 독자에게 데이터베이스, 파서, 인터프리터를 구현하는 방법을 가르칩니다. , 그리고 (기억이 도움이 된다면) 소규모 프로젝트별 컴퓨터 언어용 컴파일러도 있습니다!그들이 awk를 사용하여 예제 운영 체제도 프로그래밍했다면 이 책은 컴퓨터 과학에 대한 상당히 완전한 개론서가 되었을 것입니다!

원본 C 언어 책처럼 명확하고 간결하기로 유명하며, 올바르게 작성된 친근한 기술 문서의 훌륭한 예이기도 합니다.인덱스마저도 장인의 솜씨다.

앗?알고 있다면 가끔 명령줄에서 사용하게 되지만 더 큰 규모의 경우 시스템의 더 넓은 기능과 Python과 같은 것이 액세스를 제공하는 인터넷에 액세스할 수 없다는 느낌을 받게 될 것입니다.하지만 책?당신은 그것을 읽으면서 항상 기뻐할 것입니다!

내가 사용하는 유일한 이유 awk 자동 분할은 다음과 같습니다.

awk '{print $3}' < file.in

그러면 공백으로 구분된 세 번째 필드가 인쇄됩니다. file.in.다음보다 조금 더 쉽습니다:

tr -s ' ' < file.in | cut -d' ' -f3

파일에 다음이 포함되어 있으면 awk가 좋다고 생각합니다. 열/필드.다중 컬럼 파일의 특정 컬럼을 처리/분석할 때 사용합니다.또는 특정 열을 추가/삭제하려는 경우.

예를 들어

awk -F \t '{ if ($2 > $3) print; }' <filename>

탭으로 구분된 파일의 두 번째 열 값이 세 번째 열 값보다 큰 경우에만 인쇄됩니다.

물론 Perl이나 Python을 사용할 수도 있지만 awk를 사용하면 간결한 한 줄 명령으로 훨씬 더 간단해집니다.

또한 awk를 배우는 것은 비용이 매우 저렴합니다.한 시간 안에 awk 기본 사항을 배울 수 있으므로 다른 프로그래밍/스크립팅 언어를 배우는 것만큼 노력이 들지 않습니다.

HTML을 처리하기 위해 가끔 AWK를 사용합니다.예를 들어 다음 코드는 테이블을 csv 파일로 변환합니다.

BEGIN {s=""; FS="n"}
/<td/ { gsub(/<[^>]*>/, ""); s=(s ", " $1);}
/<tr|<TR/ { print s; s="" }

화면 스크래핑을 수행하는 경우 유용합니다.사실 제가 AWK를 좋아하는 이유는 문제에 대한 잘못된 솔루션을 너무 빨리 구축할 수 있기 때문일 수도 있습니다. :) 더 많은 예.Jon Bentley의 사랑스러운 작품에도 언급되어 있습니다. 프로그래밍 진주.

저는 awk를 자주 사용합니다.파이프라인 중간에 매우 간단한 텍스트를 섞는 데 좋습니다.전혀 필요하지 않은 것과 Perl/Python/무엇이든 뽑아내야 하는 것 사이의 매우 좁은 틈새 시장을 채웁니다.

나는 당신에게 그것에 많은 시간을 할애하라고 권하고 싶지는 않지만, 구문의 기초를 아는 것이 도움이 될 것입니다. 최소한 매뉴얼을 사용하고 싶을 때 빨리 매뉴얼을 참고할 수 있을 만큼 충분할 것입니다.

대부분의 awk one liner는 Perl one liner로 달성할 수 있습니다 - Perl one liner 사고방식을 선택하는 경우.아니면 Perl 세 개의 라이너를 사용하세요 :)

awk를 좋아하는 사람이 작성한 쉘 스크립트를 유지 관리하고 있다면 분명히 awk를 배워야 할 것입니다.

꼭 필요한 부분이 없더라도 정규식을 이미 알고 있다면 기본 사항을 익히는 데 오랜 시간이 걸리지 않으며 당시에 어떻게 설계되었는지 살펴보는 것도 재미있습니다.오히려 우아해요.

이미 sed를 알고 사용하고 있다면 최소한 약간의 awk를 익히는 것이 나을 것입니다.꽤 강력한 트릭을 위해 함께 연결될 수 있습니다.항상 청중에게 감동을 줍니다.

이 질문을 던진 지 6년이 지난 지금 나는 확신을 갖고 대답할 수 있습니다.아니요, awk를 배우는 것은 그만한 가치가 없습니다.

기본 작업은 처리하지만 기본 bash 명령 또는 GUI 도구도 쉽게 처리할 수 있습니다.Python(즐겨 찾는 언어 또는 내 언어) 또는 Ruby와 같은 최신 동적 언어를 사용하면 더 복잡한 작업을 쉽게 처리할 수 있습니다.

많은 작업(웹, 관리, 데이터 처리, 자동화 등)에 도움이 될 최신 스크립팅 동적 언어를 반드시 배워야 합니다.그리고 awk와 같은 도구를 배우면 전혀 쓸모가 없으므로 매달 기껏해야 몇 초만 절약할 수 있습니다.

Computerworld는 최근에 회견 알프레드 V와 함께AWK에 대해 Aho(AWK의 세 제작자 중 한 명)입니다.꽤 흥미로운 읽기입니다.따라서 AWK를 배우는 것이 좋은 이유에 대한 몇 가지 힌트를 찾을 수 있을 것입니다.

Perl이나 대부분의 다른 스크립팅 언어가 설치되지 않은 임베디드 Linux 시스템에서 작업하는 마지막 계약에서 AWK를 배우는 것은 나에게 매우 중요했습니다.

쉘 스크립팅 중에 데이터나 프로그램 출력을 위해 로그 파일을 가끔 구문 분석해야 하는 경우에 주로 유용합니다. Python에서 코드 줄이 조금 더 필요한 작업을 awk에서 수행하는 것이 매우 쉽기 때문입니다.

확실히 그것보다 더 많은 힘을 가지고 있지만 이것은 대부분의 사람들이 그것을 사용하는 작업인 것 같습니다.

물론:저는 사용 가능한 언어가 다음과 같은 환경에서 일하고 있습니다.(COBOL, OMG, OMG를 생성하는 일부 형편없는 언어), bash(이전 버전), perl(아직 마스터하지 않음), sed, awk 및 기타 명령줄 유틸리티.앎 awk 몇 시간을 절약할 수 있었습니다(그리고 동료들로부터 여러 가지 텍스트 처리 작업을 생성했습니다. 그들은 하루에 적어도 세 번 나에게 왔습니다).

awk는 유틸리티/난이도 비율이 매우 높으며 "간단한 awk"는 모든 Unix/Linux/MacOS에서 작동합니다(그리고 다른 시스템에도 설치할 수 있습니다).

사람들이 타이핑을 싫어했던 황금 시대에 설계되었기 때문에 스크립트는 매우 짧고 빠르게 작성할 수 있습니다.빠른 버전인 mawk를 설치하려고 합니다. 계산 속도가 약 9배 빨라지고 awk/gawk는 다소 느리므로 R 대신 사용하고 싶다면 mawk를 설치해 보겠습니다.당신은 mawk를 원할 수도 있습니다.

아마 더 이상 그럴 가치가 없을 것 같아요.나는 때때로 그것을 검색 기능이 포함된 sed보다 훨씬 더 다재다능한 스트림 편집기로 사용하지만, Python에 능숙하다면 필요한 시간을 보상하기 위해 훨씬 더 빨리 완료할 수 있는 작업을 모르겠습니다. awk를 배우기 위해.

다음 명령은 아마도 지난 2년 동안 내가 awk를 사용한 유일한 명령일 것입니다(Debian/Ubuntu 시스템에서 절반이 제거된 패키지를 제거합니다).

$ dpkg -l|awk '/^rc/ {print $2}'|xargs sudo dpkg -P

아니요.

흥미로울 수도 있지만 Perl과 같은 보다 강력한 다른 도구를 사용하여 awk가 수행할 수 있는 모든 작업을 수행할 수 있습니다.

더 강력한 도구를 배우는 데 시간을 투자하세요. 그리고 그 과정에서 우연히 몇 가지 이상한 점을 발견하게 됩니다.

나는 있다고 말하고 싶습니다.간단한 작업의 경우 AWK는 경험이 부족한 시스템 관리자/개발자에게 Python보다 훨씬 쉽습니다.약간의 AWK를 배우고 많은 일을 할 수 있습니다. Python을 배운다는 것은 완전히 새로운 언어를 배우는 것을 의미합니다(예, AWK도 언어라는 것을 알고 있습니다).

Perl은 AWK가 할 수 있는 많은 일을 할 수 있지만 오늘날과 같은 시대에는 Python을 선택할 것입니다.그렇습니다. AWK를 배워야 합니다.하지만 Python도 배우세요 :-)

이제 PERL은 거의 모든 중요한 플랫폼으로 포팅되었으므로 그럴 가치가 없다고 말하고 싶습니다.sed와 awk를 함께 사용하는 것보다 더 다재다능합니다.자동 분할의 경우 Perl에서 다음과 같이 수행할 수 있습니다.

perl -F':' -ane 'print $F[3],"\n";' /etc/passwd

편집하다:당신은 여전히 ​​​​얻고 싶을 수도 있습니다 약간 일부 다른 도구는 패턴 기반 작업 철학을 기반으로 하기 때문에 awk에 대해 잘 알고 있습니다(예:솔라리스의 DTrace).

나는 파일이 열 형식으로 되어 있는 영역에서 작업합니다.따라서 awk는 다른 소프트웨어가 함께 작동할 수 있도록 파일을 다시 포맷하는 데 매우 중요합니다.IT 전문가가 아닌 경우 awk를 사용하는 것만으로도 충분하고 완벽합니다.이제 컴퓨터 속도는 문제가 되지 않으므로 awk와 unix를 결합하여 많은 1개 라이너 명령을 "스크립트"로 파이프할 수 있습니다.필드 및 레코드별 Awk 검색을 사용하면 파일을 열 때 "vi" 대신 파일 데이터를 매우 빠르게 확인하는 데 사용됩니다.awk 기능은 특히 내 직업에 기쁨을 가져다주었다고 말하고 싶습니다. 동료가 awk를 사용하여 문제를 신속하게 정리하도록 도울 수 있습니다.나에게 놀라운 코드입니다.

저는 최근 20Gbs가 넘는 DOS 공격을 기록하는 네트워크 pcap 파일을 시각화하려고 했습니다.타임스탬프와 IP 주소가 필요했습니다.내 시나리오에서는 AWK one-liner도 훌륭하고 매우 빠르게 작동했습니다.제가 특별히 사용했던 AWK 추출된 파일을 정리하려면 그룹화된 시간 범위 내에서 해당 IP 주소로부터 IP 주소와 총 패킷 수를 가져옵니다.위에 다른 분들이 쓰신 내용에 전적으로 동의합니다.그것은 귀하의 필요에 따라 다릅니다.

awk 강력한 도구 언어이므로 다음을 찾을 가능성이 높습니다. awk 당신이 어떤 종류의 IT 전문가라면 어딘가에서 사용되고 있을 것입니다.구문과 정규식을 처리할 수 있는 경우 grep 그리고 sed 그러면 픽업하는 데 문제가 없을 것입니다 awk 아마도 그럴만한 가치가 있을 것입니다.

내가 찾은 곳 awk 정말 빛나는 점은 여러 줄의 레코드를 처리하고 여러 파일을 동시에 맹글링/보간하는 등의 작업을 단순화하는 데 있습니다.

awk를 배우지 않는 한 가지 이유는 정규식에 탐욕스럽지 않은 일치 항목이 없기 때문입니다.

awk/gawk에 탐욕스럽지 않은 일치 항목이 없어 일부 정규 표현식을 제대로 실행할 수 없다는 것을 갑자기 디버깅했기 때문에 이제 다시 작성해야 하는 awk 코드가 있습니다.

이는 팀 동료와 리더, 그리고 수행 중인 작업에 따라 다릅니다.

if( team mates and leader ask to write awk ){
  if( you can reject that){
    if( awk code is very small){
      learn little just like learn Regex
    }else{
      use python or even java
    }
  }else{
    do as they ask
  }
}

나는 현재 Python으로 코딩을 하고 있습니다.하지만 아직은 간단한 일회성 파일 변환에 쉽게 사용할 만큼 잘 알지 못합니다.

awk를 사용하면 유닉스 명령줄에서 꽤 멋진 변환을 수행하는 한 줄의 코드 조각을 빠르게 개발할 수 있습니다.awk를 사용할 때마다 내가 작성하는 코드 조각은 일회용이며 길이는 몇 줄을 넘지 않습니다.한 줄에 "if" 문과 "printf" 문이 여기 저기 있을 수도 있습니다.

나는 awk를 사용하여 10줄이 넘는 코드를 작성한 적이 없습니다.나는 몇 년 전에 그러한 대본을 보았습니다.

하지만 많은 코드 줄이 필요한 모든 작업에는 Python을 사용합니다.

나는 awk를 좋아한다.sed와 함께 사용하면 매우 강력한 도구입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top