awk 스크립팅에 대해 혼란스러워

awk 스크립팅에 대해 혼란스러워

지침에 따르면 스크립트 파일은 다음 명령을 사용하여 시스템에서 테스트됩니다.

awk -f ./awk4.awk input.csv

다음 파일을 받아들이고 이름과 성적 필드를 출력하는 awk 스크립트를 작성하세요.

태스크1

분명히 bash 스크립트를 만들었고 명령줄에서 awk -f를 사용하여 실행되는 awk 스크립트여야 합니다. 아래는 내 코드입니다. 모든 것을 다시 실행할 필요 없이 bash 스크립트를 awk 스크립트로 변환하는 쉬운 방법이 있습니까? 방향이 정말 헷갈려요.

#!/usr/bin/awk -f
##comment create an awk script that will accept the following file and output the name and grade fields
##comment specify the delimiter as ","
awk -F, '

/./ {
##comment print the name and grade, which is first two fields
print $1" "$2

}' $1

답변1

awk 스크립트에서 내용은 명령으로 제공되는 내용입니다 awk. 따라서 이 경우에는 다음과 같습니다.

/./ {
##comment print the name and grade, which is first two fields
print $1" "$2

}

그러나 이렇게 하면 사용하기가 까다로워지므로 -F ,대신 블록 FS에 설정하세요 BEGIN.

따라서 스크립트는 다음과 같습니다.

#!/usr/bin/awk -f
##comment create an awk script that will accept the following file and output the name and grade fields
##comment specify the delimiter as ","
BEGIN { FS = "," }

/./ {
##comment print the name and grade, which is first two fields
print $1" "$2

}

답변2

스크립트 를 작성했지만 awk스크립트에 배치했습니다. 이것은 귀하의 awk스크립트입니다:

/./ {
##comment print the name and grade, which is first two fields
print $1" "$2
}

파일에 저장 script.awk하고 다음과 같이 실행하십시오.

awk -F',' -f script.awk inputfile

이제 스크립트에 대한 몇 가지 힌트가 있습니다.

awk명령은 다음과 같습니다 CONDITION {COMMAND(S)}. CONDITION라인(레코드)에 대해 가 충족 되면 {COMMAND(S)}실행됩니다. CONDITION가 없으면 {COMMAND(S)}모든 레코드에 대해 실행되고, 없으면 {COMMAND(S)}레코드는 충족될 때마다 인쇄됩니다 CONDITION.

귀하의 경우:

  1. /./모든 문자와 줄을 일치시키는 정규식입니다. 따라서 빈 줄을 제외한 모든 항목은 조건으로 거의 중복됩니다.

  2. " "변수 사이의 구분 기호로 사용하고 ,기본값을 적용하는 데 사용합니다.

  3. ,초기 -블록의 스크립트에서 구분 기호로 using을 제공해야 합니다 BEGIN.


BEGIN {FS=","}
{print $1,$2}

쉼표를 출력 구분 기호로 사용하려면 다음을 사용하십시오.

BEGIN {FS=OFS=","}
{print $1,$2}

답변3

awk 스크립트는 awk. awk 스크립트를 작성하는 방법에는 두 가지가 있습니다.

  1. 텍스트 파일에 awk 명령을 작성하고 awk -f /path/to/file.awk. 귀하의 경우에는 다음과 같습니다.

    /./ {
    ##comment print the name and grade, which is first two fields
    print $1" "$2
    
    }
    

    그리고 다음과 같이 실행합니다.

    awk -F, -f /path/to/file.awk inputFile
    

    awk -f ./path/to/file.awk inputFile또는 을 사용하지 않고 로만 실행해야 하는 경우 -F,스크립트 자체에서 필드 구분 기호를 설정합니다.

    BEGIN{ FS=","}
     /./ {
    ##comment print the name and grade, which is first two fields
    print $1" "$2
    
    }
    

    그런 다음 awk -f /path/to/file.awk inputFile.

  2. 명령을 작성하되 shebang을 사용하여 스크립트를 읽어야 하는 인터프리터를 지정합니다. 귀하의 경우에는 다음과 같습니다.

    #!/usr/bin/awk -f
    
    ## With this approach, you can't use -F so you need to set
    ## the field separator in a BEGIN{} block.
    BEGIN{ FS=","}
    /./ {
    ##comment print the name and grade, which is first two fields
    print $1" "$2
    
    }
    

    그런 다음 스크립트를 exwecutable( chmod a+x /path/to/file.awk)로 만들고 다음과 같이 실행합니다.

    /path/to/file.awk inputFile
    
    

둘 다 awk 스크립트입니다. 세 번째 옵션은 다음을 작성하는 것입니다.껍데기대신 스크립트를 실행하고 쉘 스크립트가 awk를 실행하도록 하세요. 다음과 같이 보일 것입니다:

#!/bin/sh

awk -F, '

/./ {
##comment print the name and grade, which is first two fields
print $1" "$2

}' "$1"

당신이 가진 것은 이것저것이 아니었습니다. 당신은 awk shebang을 사용하고 있었지만 awk 스크립트 대신 쉘 스크립트를 가지고 있었습니다.

관련 정보