그래서 첫 번째 필드를 뺀 문자의 발생 횟수를 계산하는 awk 스크립트가 있고 모든 순열에 대한 변수에 명령의 출력을 저장하려고 합니다. 그러나 아래 방법은 효과가 없는 것 같습니다.
#!/bin/awk -f
{
var=$($1="";print gsub("o",""))
echo $var
}
입력하다:
Hello how are you?
Orange obliviate
산출:
3
2
원하는 출력:
3 2
감사합니다!
답변1
블록에서 출력하는 배열에 숫자를 저장하여 END
이를 수행 할 수 있습니다.
{
$1 = ""
count[++n] = gsub("o", "")
}
END {
$0 = "" # empty the current record
for (i = 1; i <= n; ++i)
$i = count[i] # create new fields for output
# output the current record (created above)
print
}
또는 계산된 숫자를 출력하고 필요한 경우 필드 구분 기호로 구분한 다음 END
블록의 행을 완성할 수 있습니다.
{
$1 = ""
# Print the number, preceded by OFS if this is not the first line.
# Does not output a newline (ORS).
printf "%s%s", (NR > 1 ? OFS : ""), gsub("o", "")
}
END {
# Finish the output (ORS is a newline by default).
printf "%s", ORS
}
두 변형 모두 사용자가 명령줄에서 자신에게 적합한 값을 설정할 수 있습니다 OFS
.ORS
$ awk -v OFS=',' -f script.awk file
2,1
$ awk -v OFS='\t' -f script.awk file
2 1
$ awk -v OFS='-->' -v ORS='.\n' -f script.awk file
2-->1.
참고: 이것이 당신이 하고 있는 일이기 때문에 질문에 표시된 출력이 잘못되었다고 가정합니다.아니요첫 번째 필드를 무시하고o
편지).