위와 관련하여 몇 가지 문제가있는 것으로 보입니다.
먼저, 나는이 당신이 게시 한 된 오차 nawk 얻기 위해 @ 그 John1024에 동의, 당신은 실제로 실행해야합니다
BUSINESS_DAYS=`echo $($currCal|nawk "NR>2 {print substr($0,4,14)}" |tr "\n" " ")`
을 nawk 스크립트를 큰 따옴표로.
또한 nawk 오류를 해결하면 currCal
을 사용하는 방법에 문제가 발생할 것입니다. 변수에 cal
명령의 실제 출력을 가져 오지만 echo
이 아닌 파이프 또는 이와 유사한 변수 값 앞에 |
앞에있는 변수 값 (즉, cal
의 출력)을 명령으로 사용하고 있습니다.
다른 서브 쉘 (바깥 쪽의``s) 내의 서브 쉘 명령 ($()
부분)의 결과에 echo
을 사용하는 이유에 대한 추가 질문이 나타납니다.
마지막으로 위에 표시된 두 줄은 당월의 영업일 목록을 BUSINESS_DAYS
변수로 가져옵니다. 그들은 16 일을 출력/저장하지 않습니다. 당신이 정말로 현재 달의 달력을 캐시 필요합니다
: 다음 호출 중 하나를 할 수 있습니다 (또한 지속적으로 $()
서브 쉘 구문을 사용하여 변경) 고려 사항으로 위의 모든 촬영
복수의 날을 당겨 :
currCal="$(/usr/bin/cal)"
BUSINESS_DAYS="$(echo "${currCal}" | \
nawk 'NR>2 {print substr($0,4,14)}' | \
tr "\n" " ")"
DAY=16
DAYTH_DAY="$(echo "${BUSINESS_DAYS}" | nawk -v "day=${DAY}" '{ print $day }')
을이 단지 1과 수행의 경우 :
,543,
한 가지 더 알아 두십시오 : awk (/ nawk)에서 완전히 완료되면 여기 처리가 단순화 될 수 있지만 이미 선택한 기본 프레임 워크를 고수하고 싶습니다.주석의 요청에 따라
업데이트 :는
순수 POSIX의 AWK 버전 :
DAY=16
DAYTH="$(cal | awk -v "day=${DAY}" '
(NR < 3) { next ; }
/^.[0-9 ]/ { $1="" ; }
/^/|| (NF == 7) { $NF="" ; }
{ hold=hold $0 ; }
END { split(hold,arr," ") ; print arr[day] ; }')"
예, 이 단순화 된 의견의 문제입니다, 나는 확신 누군가가 이것을보다 간결하게 만들 수 있습니다. 이것이 어떻게 작동하는지 설명 :
/^.[0-9 ]/ { $1="" ; }
의 경우 : 일요일에 날짜가 주 동안
(NR < 3) { next ; }
, 즉 일요일의 날짜를 트림 :
는 칼 출력의 헤더를 건너 뛰기 일주일 후 (일주일의 첫째 주) 또는 주 (전체 7 일간) : 해당 주간 토요일 날짜를 자르십시오.
선 일단
2,063,210 만 hold
로 카레, 평일의 날짜가 :
END { split(hold,arr," ") ; print arr[day] ; }')"
명령에 표시된대로 ''NR> 2 {print substr ($ 0,4,14)} ''가 _single_ 따옴표 안에 있습니다. 이 오류 메시지는 _different_ 명령이 실행되었음을 나타내며, nawk에 대한 인수는 _double_ 따옴표 안에 있지만 _single_ 따옴표에는 없습니다. – John1024
@ John1024 John 감사합니다. 나는이 BUSINESS_DAYS ='$ ($ currCal | nawk "NR> 2 {print substr ($ 0,4,14)}"| tr "\ n" "")'같은 오류를 시도했다. – Pat
다시 작은 따옴표를 사용해야하는 경우 awk 인수를 큰 따옴표로 묶어 사용합니다. – John1024