Bash에서 숫자를 해당 문자열(낮음/높음)으로 바꾸는 방법은 무엇입니까?

Bash에서 숫자를 해당 문자열(낮음/높음)으로 바꾸는 방법은 무엇입니까?

파일이 있습니다:

property(Address1, 4.5)
property(Address2, 2.2)
property(Address3, 9.0)
property(Address4, 3.4)
---

일부 조건에 따라 부동 소수점 숫자를 바꾸고 싶습니다(예: 숫자가 2에서 4 사이이면 Low로 바꾸고 그렇지 않으면 High로 바꿉니다).

property(Address1, High)
property(Address2, Low)
property(Address3, High)
property(Address4, Low)
---

내 시도: (1) 먼저 $를 사용하여 숫자를 추출합니다. (2) 조건 (3)이 만족되는지 확인한 후 인쇄합니다. 그런데 이 과정에서 주소*를 출력 파일로 출력할 수 없습니다.

답변1

이는 (엄격히) 귀하의 요구 사항을 충족합니다.

awk '{ print $1, (($2>2)&&($2<4))?"Low)":"High)" }'

9.0)그러나 awk는 이와 같은 문자열 (후행 대괄호 포함)을 숫자로 변환한다는 사실을 활용합니다 9. 예를 들어 공백을 추가하면 실패할 수 있습니다.

더 엄격한 해결책은 닫는 괄호를 필드 구분 기호로 사용하여 필드 번호의 내용에서 이를 제거하는 것입니다 2.

awk -F'[ )]' '{print $1,(($2>2)&&($2<4))?"Low)":"High)"}'

답변2

if 및 else 조건을 시도했습니다.

sed "s/)$//g" filename| awk '{if($2 > 2 && $2 < 4) {$2="low)";print $0}else{$2="high)";print $0}}'
    property(Address1, high)
    property(Address2, low)
    property(Address3, high)
    property(Address4, low)

답변3

for perl, 숫자가 형식에 있고 숫자 [-]<digits>[.<digits>]앞이나 뒤에 오지 않는 한 입력의 어느 위치에서나 일치한다고 가정합니다.단어문자( 예를 Address1들어 변경되지 않음 AddressHigh):

<input perl -pe 's{(?<!\w)-?\d[\d.]*(?!\w)}{$& >=2 && $& <=4 ? "Low" : "High"}ge'

관련 정보