awk: 1행: { 또는 그 부근에서 구문 오류가 발생했습니다.

awk: 1행: { 또는 그 부근에서 구문 오류가 발생했습니다.

숫자표가 포함된 텍스트 파일에서 최대값과 최소값을 얻으려고 노력해 왔습니다. 이를 위해 다음을 사용하여 파일의 각 열을 엽니다.기능for 루프. 하지만 아래에서 이 오류가 발생합니다. 저는 awk 초보자인데 문제를 찾을 수 없습니다. 도와주세요!

나는 이 문제에 봉착했습니다:

awk: line 1 : syntax error at or near {
awk: line 1 : syntax error at or near }
awk: line 1 : syntax error at or near {
awk: line 1 : syntax error at or near }

이것은 내 스크립트입니다.

#!/bin/bash
for i in {1..11}
do
    #print minimum value in the text file.
    awk -F' ' '{print ${i}}' [filename].txt | sort -n | head -1
    #print maximum value in the text file.
    awk -F' ' '{print ${i}}' [filename].txt | sort -n | tail -1
done

답변1

쉘 스크립트의 구조를 고려하여 각 열의 최소값과 최대값을 결정하려고 한다고 가정합니다. 이 작업은 완전히 AWK에서 수행할 수 있습니다.

#!/usr/bin/awk -f
BEGIN { delete mins; delete maxs }
{
  for (i = 1; i <= NF; i++) {
    if (!(i in mins) || $i < mins[i]) mins[i] = $i
    if (!(i in maxs) || $i > maxs[i]) maxs[i] = $i
  }
}
END {
  for (i = 1; i in mins; i++) printf("%d ", mins[i])
  print ""
  for (i = 1; i in maxs; i++) printf("%d ", maxs[i])
  print ""
}

BEGIN줄은 빈 배열을 초기화합니다.

두 번째 블록은 각 행과 각 행의 각 필드를 처리합니다. 아직 값을 저장하지 않았거나 값이 저장된 값보다 작거나(최소값) 크면(최대값) 배열의 키와 비교하여 현재 인덱스를 확인합니다. 배열의 값입니다.

END블록은 결과인 루프 인덱스를 표시합니다.

관련 정보