我有一个文件:
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),然后打印。但在此过程中,我无法将 Address* 输出到输出文件。
答案1
这(严格)满足您的要求:
awk '{ print $1, (($2>2)&&($2<4))?"Low)":"High)" }'
但它利用了这样一个事实,即 awk 将像这样的字符串9.0)
(带有尾随括号)转换为数字9
。例如,如果添加空格,则可能会失败。
更严格的解决方案是还使用右括号作为字段分隔符,将其从字段 number 的内容中删除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
对于perl
,假设数字采用 格式[-]<digits>[.<digits>]
,并在输入中的任何位置匹配它们,只要它们前面或后面都没有单词字符(因此Address1
不会更改为AddressHigh
例如):
<input perl -pe 's{(?<!\w)-?\d[\d.]*(?!\w)}{$& >=2 && $& <=4 ? "Low" : "High"}ge'