![Bash에서 숫자를 해당 문자열(낮음/높음)으로 바꾸는 방법은 무엇입니까?](https://linux55.com/image/142936/Bash%EC%97%90%EC%84%9C%20%EC%88%AB%EC%9E%90%EB%A5%BC%20%ED%95%B4%EB%8B%B9%20%EB%AC%B8%EC%9E%90%EC%97%B4(%EB%82%AE%EC%9D%8C%2F%EB%86%92%EC%9D%8C)%EC%9C%BC%EB%A1%9C%20%EB%B0%94%EA%BE%B8%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
파일이 있습니다:
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'