awk에서 스크립트 만들기

awk에서 스크립트 만들기

텍스트 파일의 형식을 다시 지정하는 명령을 실행합니다.

awk -F, '{if ($6<0) print $1$2,"   "$3$4,$5$6;
               else print $1$2,"   "$3$4$5,$6;}' filename.txt > seqXXX.txt

매번 명령을 입력할 필요가 없도록 이것을 스크립트로 어떻게 바꿀 수 있습니까? 이 작업을 수행하는 방법에 대한 기사를 읽었지만 더 혼란스럽습니다.

답변1

이를 수행하는 방법은 스크립트로 변환하려는 명령 부분에 따라 다소 다릅니다. 다음과 같은 세 가지 변형을 제공합니다.

  1. 프로그램 awk자체가 스크립트 역할을 합니다.
  2. 명령은 전체적으로 스크립트 역할을 합니다.
  3. 이 명령은 쉘 기능으로 작동합니다.

awk프로그램은 다음과 같이 스크립트로 바뀔 수 있습니다

#!/usr/bin/awk -f

BEGIN { FS = "," }

{
    if ($6 < 0)
        print $1$2,"   "$3$4,$5$6
    else
        print $1$2,"   "$3$4$5,$6
}

먼저 필드 구분 기호를 쉼표로 설정한 다음 각 입력 줄에서 코드 블록을 실행합니다.

여기에 사용된 -line을 사용 하면 스크립트 파일을 실행할 때 마치 명령줄에 작성한 것처럼 실행 #!됩니다 . awk -f script.awk첫 번째 줄에 사용된 경로는 awk시스템의 올바른 인터프리터를 가리키도록 조정되어야 합니다(의 출력 참조 command -v awk).

chmod +x script.awk다음을 사용하여 파일을 실행 가능하게 만든 후

$ ./script.awk filename.txt >seqXXX.txt

이 명령은 다음과 같이 쉘 스크립트에 넣을 수 있습니다.

#!/bin/sh

awk -F, '{if ($6<0) print $1$2,"   "$3$4,$5$6;
               else print $1$2,"   "$3$4$5,$6;}' "$@"

여기서는 기본적으로 명령을 쉘 스크립트로 이식했습니다. 명령 "$@"끝에 있는 비트는 awk스크립트에 제공하는 명령줄 인수(단지 단일 입력 파일의 이름일 수도 있음)로 대체됩니다.

이 실행 파일을 만든 후에는 다음과 같이 사용할 수 있습니다.

$ ./script.sh filename.txt >seqXXX.txt

파일명이 다음과 같은 경우변화 없는절대 변경하지 말고 스크립트에도 넣으세요.

#!/bin/sh

awk -F, '{if ($6<0) print $1$2,"   "$3$4,$5$6;
               else print $1$2,"   "$3$4$5,$6;}' filename.txt >seqXXX.txt

그런 다음 추가 매개변수나 리디렉션 없이 명령줄에서 스크립트를 호출합니다.


명령을 셸 함수로 변환할 수 있습니다. 이는 별칭과 거의 비슷하지만 일반적으로 좀 더 유연합니다.

myreformat () {
    awk -F, '{if ($6<0) print $1$2,"   "$3$4,$5$6;
                   else print $1$2,"   "$3$4$5,$6;}' "$@"
}

이는 일반적으로 쉘 별칭 등을 넣는 위치에 배치됩니다( 쉘을 ~/.bashrc사용하는 경우 아마도 거기에 있을 것입니다). bash이 기능은 다음에서 사용할 수 있습니다.다음시작한 쉘 세션.

위의 쉘 스크립트 변형과 거의 동일한 방식으로 호출됩니다.

$ myreformat filename.txt >seqXXX.txt

관련 정보