지침에 따르면 스크립트 파일은 다음 명령을 사용하여 시스템에서 테스트됩니다.
awk -f ./awk4.awk input.csv
다음 파일을 받아들이고 이름과 성적 필드를 출력하는 awk 스크립트를 작성하세요.
분명히 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
.
귀하의 경우:
/./
모든 문자와 줄을 일치시키는 정규식입니다. 따라서 빈 줄을 제외한 모든 항목은 조건으로 거의 중복됩니다." "
변수 사이의 구분 기호로 사용하고,
기본값을 적용하는 데 사용합니다.,
초기 -블록의 스크립트에서 구분 기호로 using을 제공해야 합니다BEGIN
.
BEGIN {FS=","}
{print $1,$2}
쉼표를 출력 구분 기호로 사용하려면 다음을 사용하십시오.
BEGIN {FS=OFS=","}
{print $1,$2}
답변3
awk 스크립트는 awk
. awk 스크립트를 작성하는 방법에는 두 가지가 있습니다.
텍스트 파일에 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
.명령을 작성하되 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 스크립트 대신 쉘 스크립트를 가지고 있었습니다.