如果列的值超过100,则将列的值替换为1

时间:2017-10-16 14:10:19

标签: awk sed

在特定列中找到大于100的数字时,有一种方法可以放置'1'吗?

例如,在我有这个文件的文件中。

695, 610976, 488567

第三栏(488567)超过100,所以我想这样:

695, 610976, 1

2 个答案:

答案 0 :(得分:0)

使用awk:

 awk '{print $1,$2,($3>100)? 1 : $3}' infile.txt > outfile.txt

你也可以使用布尔逻辑对此进行完全数学计算,而不使用Ternary运算符:

  awk '{print $1,$2, ($3<=100)*$3+($3>100)*1}' infile.txt > outfile.txt

答案 1 :(得分:-1)

这是一个取决于参数的解决方案,(g) awk oneliner,已在gawk v5.0.0(Windows 10)上进行了测试:

awk -v n=3 -v maxval=100 -v repval=1 '{$n = $n > maxval ? repval : $n; print}' test.txt

您可以对列进行参数设置以检查maxval和替换值。此外,可用于具有任意数量列的文件。

请注意:字段分隔符默认为逗号,这意味着输入中的每个字段(除第一个字段外)都以空格开头。如果空格将字段强制为字符串而不是数字,则这可能会在某些awk版本上引起一些问题。 Awk应该很健壮,但还是要小心。

经过输入测试:

1, 2, 3
4, 5, 6
150, 280, 999

返回:

1, 2, 3
4, 5, 6
150, 280, 1

进一步警告:

pears, apples, bananas这样的字符串输入将返回pears, apples, 1