linux - Bash - 如何通过常数增加正数并通过相同常数减少负数?(可能是 awk/sed)
问题描述
我有多个数字文件,例如:
文件1.txt
0.77031
-10.25150 2.80417 3.62904 -9.72425 1.41742 7.96870
-24.75966
-11.22983 21.17503 -0.74532
-13.55239
我需要将每个正数更改为 +x,将每个负数更改为 -x。让 x=8
我为此尝试了 awk 脚本:
for a in $@; do
awk '{FS=OFS="." }/-/{$1-=16}1' $a | awk '{FS=OFS="." }/\d*/{$1+=8}1'
done
但它似乎只适用于第一个数字。如何使其适用于所有数字?
想要的输出:
8.77031
-18.25150 10.80417 11.62904 -17.72425 9.41742 15.96870
-32.75966
-19.22983 29.17503 -8.74532
-21.55239
我考虑过使用 sed,但它似乎不适用于增加和减少数字
解决方案
$ awk -v n=8 '{for (i=1; i<=NF; i++) $i += ($i<0 ? -n : n)} 1' file
8.77031
-18.2515 10.8042 11.629 -17.7242 9.41742 15.9687
-32.7597
-19.2298 29.175 -8.74532
-21.5524
推荐阅读
- java - 访问二维数组的元素时出现问题(仅生成一列)。- 爪哇
- nginx - 带有配置片段的 kubernetes nginx 入口错误
- delphi - 如何将包含 TPngImage 的 TImage 保存为位图文件?
- python - 函数语句中的名称绑定
- arrays - 使用 Firebase 实时数据库向用户发送表单
- spring-boot - 调用 API 时如何通知订阅者 API?
- prometheus - 何时使用 sum_over_time 与增加 Promql Grafana
- python - 删除行时如何检查多个数据
- python-3.x - 如何使用 distutils 将 C 扩展构建为 C 扩展主模块的子模块?
- r - 将引用的参数传递给容器的 azure webapp --startup-file