나는 문제에 대한 올바른 솔루션을 사용하기를 좋아하기 때문에 구식 도구를 포함하여 새로운 도구를 지속적으로 배우고 있습니다.
그럼에도 불구하고 그들 중 일부를 배울 이유가 있는지 궁금합니다. awk
예를 들어 나에게 흥미이지만, 간단한 텍스트 처리를 위해, 내가 사용할 수있는 grep
, cut
, sed
, 등 복잡한 것들에 대한, 내가 파이썬 갈 것이다있다.
강력하고 편리한 도구가 아니라는 의미는 아닙니다. 그러나 새로운 도구를 배우려면 시간과 에너지 가 필요하므로 그만한 가치가 있습니까?
답변
나는 당신이 처한 환경에 달려 있다고 생각합니다. 당신이 * nix 사람이라면 아는 awk
것이 좋은 것입니다. 거의 모든 * nix에서 찾을 수있는 유일한 다른 스크립팅 환경은 sh
. 따라서 grep
, sed,
등 awk
이 현대 주류 linux
배포판에서 확실히 대체 될 수 있지만 , 좀 더 이국적인 시스템으로 이동할 때 조금만 아는 awk
것이 Real Handy가 될 것입니다.
awk
텍스트 처리 이상의 용도로도 사용할 수 있습니다. 예를 들어, 내 상사 중 한 명이 천문학 코드를 작성 awk
합니다. 이것이 그가 얼마나 오래된 학교 이고 대단한지 입니다. 그 당시에는이 작업에 가장 적합한 도구였습니다. 지금은 저와 같은 그의 학생들이 파이썬을 사용하는 것과 그렇지 않은 것에도 불구하고 그는 그가 알고있는 것과 잘 작동하는 것에 집착합니다.
마지막으로, 전 세계에 많은 오래된 코드가 있습니다. 조금이라도 awk
아프지 않을 것이라는 것을 알고 있습니다. 그것은 또한 당신을 더 좋게 만들 것입니다 * nix 사람 🙂
답변
awk의 기초를 빨리 배우면 명령 줄에서 놀라운 일을 할 수 있습니다.
그러나 awk를 배우는 진짜 이유 는 저자 Aho, Kernighan, Weinberger가 쓴 멋진 책 The AWK Programming Language 를 읽을 변명을 가지기 위해서 입니다. 이름에서, 그것은 단순히 당신에게 어색함을 가르쳐 준다고 생각할 것입니다. 사실 그것은 시작에 불과합니다. 문자열 조작을 쉽게하는 간결한 스크립팅 언어를 사용하면 해결 될 수있는 방대한 문제를 시작합니다. awk는 첫 번째였습니다. 독자에게 데이터베이스, 파서, 인터프리터를 구현하는 방법을 가르치는 과정이 진행됩니다. , 그리고 (메모리가 나에게 도움이된다면) 작은 프로젝트 특정 컴퓨터 언어를위한 컴파일러! awk를 사용하여 예제 운영 체제도 프로그래밍했다면이 책은 컴퓨터 과학에 대한 상당히 완전한 설문 조사 소개가되었을 것입니다!
원본 C 언어 책처럼 명확하고 간결한 것으로 유명하며, 친근한 기술 문서 작성의 훌륭한 예이기도합니다. 인덱스조차도 장인 정신입니다.
Awk? 알고 있다면 가끔 명령 줄에서 사용 하겠지만, 더 큰 것은 파이썬과 같은 것이 접근 할 수있는 인터넷과 시스템의 더 넓은 기능에 접근 할 수 없다는 느낌이들 것입니다. 하지만 그 책? 당신은 항상 당신이 그것을 읽고 기뻐할 것입니다!
답변
내가 사용하는 유일한 이유 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의 사랑스러운 Programming Pearls 에서도 언급되었습니다 .
답변
나는 자주 awk를 사용합니다. 파이프 라인 중간에서 매우 간단한 텍스트 셔플 링에 적합합니다. 그것은 전혀 필요하지 않은 것과 Perl / Python / 무엇이든 채찍질 할 필요가있는 것 사이에서 매우 좁은 틈새 시장을 채 웁니다.
많은 시간을 할애하라고 조언하지는 않겠지 만, 문법의 기초를 아는 것이 유용 할 수 있습니다. 적어도 사용하고 싶을 때 매뉴얼을 빠르게 참조 할 수있을만큼 충분히.
답변
Perl one liner 사고 방식을 선택하면 대부분의 awk one liner를 Perl one liner로 얻을 수 있습니다. 또는 Perl 세 가지 라이너를 사용하십시오 🙂
awk를 좋아하는 사람이 작성한 쉘 스크립트를 유지하고 있다면 분명히 awk를 배워야 할 것입니다.
실질적인 필요가 없더라도 정규식을 이미 알고 있다면 기본을 익히는 데 오래 걸리지 않을 것이며 당시의 디자인 방식을 보는 것은 재미 있습니다. 다소 우아합니다.
