在特定列中找到大于100的数字时,有一种方法可以放置'1'吗?
例如,在我有这个文件的文件中。
695, 610976, 488567
第三栏(488567
)超过100,所以我想这样:
695, 610976, 1
答案 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