如何在Bash中批量将文本文件内所有数值乘以-1?
解决文件中所有数值乘以-1的问题
可行方案1:用awk遍历每个字段
这是最稳妥的方法,能处理所有字段的数值:
awk '{for(i=1;i<=NF;i++) $i *= -1}1' file
- 原理:
NF代表当前行的字段总数,循环遍历每个字段($1到$NF),将每个字段的值乘以-1;最后1是awk的简化写法,作用是输出修改后的整行内容。
可行方案2:用sed正则替换(仅适用于整数)
如果文件里都是整数,可以用sed的正则替换直接翻转符号:
sed -E 's/(-?[0-9]+)/-\1/g' file
- 原理:正则
(-?[0-9]+)匹配所有带正负号的整数,-\1将匹配到的数字替换成它的相反数(正变负,负变正)。
为什么你之前的命令失效?
awk '{print $0*-1}' file:$0是整行内容,awk会把整行当作单个数值处理,只会提取第一个字段进行计算,所以只有首列被修改。sed + bc的写法:你是在整行末尾追加乘法表达式,但bc无法解析空格分隔的多个数值组成的表达式,因此抛出语法错误。numfmt --from-unit=-1:numfmt的from-unit参数用于单位转换(比如字节转KB),不是用来做数值乘法运算的,所以不适用。
内容的提问来源于stack exchange,提问作者Elena
相关产品推荐
相关产品推荐

