다음과 같은 파일에 다음 코드가 있습니다 awktest1.awk
.
#!/bin/awk -f
BEGIN{print "start"}
{print $2, "\t", $5}
END{print "end"} employee.txt
여기에는 employee.txt
다음 데이터가 포함됩니다.
100 Thomas Manager Sales $5,000
200 Jason Developer Technology $5,500
300 Sanjay Sysadmin Technology $7,000
400 Nisha Manager Marketing $9,500
500 Randy DBA Technology $6,000
awk
다음과 같이 명령을 실행합니다 .
awk -f awktest1.awk
하지만 인쇄만 되고 start
끝나지 않습니다. 누구든지 내가 여기서 뭘 잘못하고 있는지 알아낼 수 있습니까?
답변1
오류는 처리할 파일 이름이 스크립트에 나와 있다는 것입니다. employee.txt
스크립트에서 이를 제거하고 아래와 같이 실행 해야 합니다.
awk -f awktest1.awk employee.txt
또는 스크립트가 실행 가능한 경우에도
./awktest1.awk employee.txt
스크립트는
#!/bin/awk -f
BEGIN{print "start"}
{print $2, "\t", $5}
END{print "end"}
실제로 awk
파일에서 읽는 것이 아니라 표준 입력의 입력을 기다리고 있습니다. 그렇기 때문에 끝이 없습니다...
답변2
보충하다@스티븐의 답변, 스크립트에서 입력 파일의 이름을 하드코딩하려면 다음과 같이 awk
작성할 수 있습니다.
#!/bin/awk -f
BEGIN{
ARGC=2
ARGV[1] = "employee.txt"
OFS = FS = "\t"
print "start"
}
{print $2, $5}
END{print "end"}
여러 파일의 경우:
#!/bin/awk -f
BEGIN{
ARGC=1
ARGV[ARGC++] = "employee1.txt"
ARGV[ARGC++] = "employee2.txt"
ARGV[ARGC++] = "employee3.txt"
# ...
# or ARGC=1+split("employee1.txt employee2.txt employee3.txt", ARGV)
OFS = FS = "\t"
print "start"
}
{print $2, $5}
END{print "end"}
답변3
employee.txt
또는 파일 이름을 명령줄 인수로 전달하지 않으려면 다음을 수행할 수 있습니다.
암호:
#!/bin/awk -f
BEGIN{
print "start"
while((getline <"employee.txt") > 0){
{print $2, "\t", $5}
}
print "end"
}