문제

나는 정말 유용하다고 생각합니다. 다음은 데이터를 조작하기 위해 모이는 한 개의 라이너입니다.

ls | awk '{ print "awk " "'"'"'"  " {print $1,$2,$3} " "'"'"'"  " " $1 ".old_ext > " $1    ".new_ext"  }' > file.csh

이 awk를 사용하여 일부 파일 이름을 바꾸고 선택적 열만 인쇄하는 스크립트 파일을 만들었습니다. 누구 든지이 작업을 수행하는 더 좋은 방법을 알고 있습니까? 당신은 하나의 라이너 또는 영리한 조작을 가장 잘 알고 있습니까?

도움이 되었습니까?

해결책

그만큼 awk 책 훌륭한 예로 가득합니다. 그들은 다운로드를 위해 수집되었습니다 Kernighan의 웹 페이지 (지금 404S).

다른 팁

멋진 하나의 라이너를 찾을 수 있습니다 여기.

나는 이것을 사용한다 :

df -m | awk '{p+=$3}; END {print p}'

파일 시스템을 가로 지르는 시스템에 사용되는 모든 디스크 공간을 총계합니다.

몇 년 전에 나는 awk에서 꼬리 스크립트를 썼습니다.

#!/usr/bin/awk -f
BEGIN {
  lines=10
}

{
  high = NR % lines + 1
  a[high] = $0
}

END {
  for (i = 0; i < lines; i++) {
    n = (i + high) % lines + 1
    if (n in a) {
      print a[n]
    }
  }
}

어리석은 일이지만 Awk가 당신에게하는 일입니다. 그것으로 놀고있는 것은 매우 재미 있습니다.

Henry Spencer는 AWK에서 Nroff의 상당히 좋은 구현을 썼습니다. 그는 그것을 "awf"라고 불렀습니다. 그는 또한 Larry Wall이 Awk가 얼마나 강력한 지 알았다면 Perl을 발명 할 필요가 없었을 것이라고 주장했다.

다음은 내가 정기적으로 사용했던 몇 가지 AWK입니다 ... $ 1, $ 2 등을 사용하여 원하는 열을 꺼낼 수 있습니다. 따라서 많은 파일을 조작하기 위해 예를 들어 MV 대신 사용할 수있는 어리석은 명령이 있습니다 ...

ls -1 *.mp3 | awk '{printf("mv %s newDir/%s\n",$1,$1)}' | /bin/sh

또는 일련의 프로세스를보고 있다면 ...

ps -ef | grep -v username | awk '{printf("kill -9 %s\n",$2)}' | /bin/sh

꽤 사소하지만 그것이 어떻게 당신에게 당신에게 꽤 많은 방법을 얻을 수 있는지 알 수 있습니다. =) 내가했던 대부분의 물건은 Xargs를 사용할 수 있지만 누가 새로운 명령을 필요로 하는가?

이 스크립트를 편집 경로 및 경로와 같은 환경 변수에 많이 사용합니다. 용법:

export PATH=$(clnpath /new/bin:/other/bin:$PATH /old/bin:/other/old/bin)

이 명령은 경로 앞에서/new/bin 및/other/bin을 추가하고, 경로에서/구/빈 및//기타/구/빈을 모두 제거하고 (존재하는 경우 - 없으면 오류가없는 경우) 경로에서 중복 디렉토리 항목을 제거합니다.

:   "@(#)$Id: clnpath.sh,v 1.6 1999/06/08 23:34:07 jleffler Exp $"
#
#   Print minimal version of $PATH, possibly removing some items

case $# in
0)  chop=""; path=${PATH:?};;
1)  chop=""; path=$1;;
2)  chop=$2; path=$1;;
*)  echo "Usage: `basename $0 .sh` [$PATH [remove:list]]" >&2
    exit 1;;
esac

# Beware of the quotes in the assignment to chop!
echo "$path" |
${AWK:-awk} -F: '#
BEGIN       {       # Sort out which path components to omit
                    chop="'"$chop"'";
                    if (chop != "") nr = split(chop, remove); else nr = 0;
                    for (i = 1; i <= nr; i++)
                            omit[remove[i]] = 1;
            }
{
    for (i = 1; i <= NF; i++)
    {
            x=$i;
            if (x == "") x = ".";
            if (omit[x] == 0 && path[x]++ == 0)
            {
                    output = output pad x;
                    pad = ":";
            }
    }
    print output;
}'

httpd에서 사용하는 메모리를 계산하십시오

ps -ylC httpd | awk '/[0-9]/ {SUM += $8} END {print SUM/1024}'

또는 httpd를 교체하여 다른 프로세스. MB에서 출력을 얻기 위해 1024로 나뉩니다.

UNIX 용 DOS 트리 명령 에뮬레이터 (찾기 + awk)를 만들었습니다.

find . -type d -print 2>/dev/null|awk '{for (i=1;i< NF;i++)printf("%"length($i)"s","|");gsub(/[^\/]*\//,"--",$0);print $NF}'  FS='/'

두 패턴 사이의 인쇄 라인 :

awk '/END/{flag=0}flag;/START/{flag=1}' inputFile

상해: http://nixtip.wordpress.com/2010/10/12/print-lines-between-two-patterns-the-awk-way/

본질적으로 서로 관련이없는 몇 가지 즐겨 찾기. 연결되지 않은 두 가지 제안으로 읽으십시오.

열 번호를 쉽게 식별합니다

:

직장에서 로그 분석과 마찬가지로 AWK를 자주 사용하는 사람들에게는 종종 파일의 열 숫자가 무엇인지 알아 내야합니다. 따라서 Apache Access 파일을 분석하는 경우 (일부 샘플을 찾을 수 있습니다. 여기) 파일에 대해 아래 스크립트를 실행합니다.

NR == 1 {
        for (i = 1 ; i <= NF ; i++)
                {
                print i "\t" $i
                }
        }
NR > 1  {
        exit
        }

나는 일반적으로 'c'olumn'n'umbers를 위해 그것을 "cn.awk"라고 부릅니다. 창의적, 어? 어쨌든 출력은 다음과 같습니다.

1   64.242.88.10
2   -
3   -
4   [07/Mar/2004:16:05:49
5   -0800]
6   "GET
7   /twiki/bin/edit/Main/Double_bounce_sender?topicparent=Main.ConfigurationVariables
8   HTTP/1.1"
9   401
10  12846

무엇이 무엇인지 말하기가 매우 쉽습니다. 나는 보통 내 서버에서 이것을 별칭하고 어디에나 가지고 있습니다.


이름으로 필드를 참조합니다

이제 파일에 헤더 행이 있고 필드 번호 대신 해당 이름을 사용한다고 가정 해 봅시다. 이렇게하면 그렇게 할 수 있습니다.

NR == 1 {
    for (i = 1 ; i <= NF ; i++)
        {
        field[$i] = i
        }
    }

이제이 헤더 행이 있다고 가정 해 봅시다 ...

metric,time,val,location,http_status,http_request

... 그리고 나는 요약하고 싶다 val 열. 3 달러를 언급하는 대신 이름으로 다음을 참조 할 수 있습니다.

NR > 1  {
    SUM += $field["val"]
    }

주요 이점은 스크립트를 훨씬 더 읽기 쉽게 만드는 것입니다.

인쇄 필드는 대부분의 AWK 튜토리얼에서 언급 된 첫 번째 것 중 하나입니다.

awk '{print $1,$3}' file

덜 알려져 있지만 똑같이 유용한 분야를 제외하고 가능합니다.

awk '{$1=$3=""}1' file
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top