지침에는 다음 명령을 사용하여 스크립트 파일이 시스템에서 테스트된다는 내용이 나와 있습니다.
awk -f ./awk4.awk input.csv
다음 파일을 받아들이고 이름과 성적 필드를 출력하는 awk 스크립트를 작성하세요.
분명히 awk -f를 사용하여 명령줄에서 실행할 수 있는 awk 스크립트여야 하는 bash 스크립트를 만들었습니다. 아래는 내 코드입니다. 모든 것을 다시 실행하지 않고도 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
귀하의 경우:
/./
모든 문자와 일치하는 정규식입니다. 따라서 빈 줄을 제외한 모든 줄 - 조건으로서 거의 중복됩니다.기본값을 적용하기
" "
위해 변수 사이의 구분 기호로 사용합니다 .,
,
스크립트의 초기 블록에 구분 기호로 사용을 제공 해야 합니다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 }
그런 다음 스크립트를 실행 가능하게 만들고(
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 스크립트 대신 쉘 스크립트를 사용하고 있습니다.