linux - 如何从第二行使用 awk '{print $1*Number}' 或告诉他忽略 Na

我有一个名为“waterproofposters.jsonl”的文件,其中包含这种类型的输出:

Regular price
100
200
300
400
500

而且我需要取出每个值的 2%。我使用了以下代码:

awk '{print $1*0.98}' waterproofposters.jsonl 

然后我有以下输出:

0
98
196
294
392
490

然后我就卡住了,因为我需要在第一行输入“正常价格”而不是“0”

我想用“正常价格使用”替换“0”

find . -name "waterproof.jsonl" | xargs sed -i -e 's/0/Regular price/g'

但它会将所有的“0”替换为“正常价格”

最佳答案

按原样打印第一行:

awk '{print (NR>1 ? $0*0.98 : $0)}'

按原样打印不是数字的行:

awk '{print ($0+0 == $0 ? $0*0.98 : $0)}'

我在乘法中使用 $0 而不是 $1 因为:

  1. 它们在您的数字输入中是同一回事,并且
  2. 在美学上我更喜欢在整个脚本中使用相同的值,而不是数字行和非数字行使用不同的值,并且
  3. 当您使用特定字段时,它会导致 awk 进行字段拆分,因此当整个记录都可以时,不引用字段会更有效一些。

下面是以上两个与发布的示例输入一起使用:

$ awk '{print (NR>1 ? $0*0.98 : $0)}' file
Regular price
98
196
294
392
490

$ awk '{print ($0+0 == $0 ? $0*0.98 : $0)}' file
Regular price
98
196
294
392
490

这是在输入文件中具有非数值的两个给定输入之间的区别:

$ cat file
Regular price
100
200
foobar
400
500

$ awk '{print (NR>1 ? $0*0.98 : $0)}' file
Regular price
98
196
0
392
490

$ awk '{print ($0+0 == $0 ? $0*0.98 : $0)}' file
Regular price
98
196
foobar
392
490

关于linux - 如何从第二行使用 awk '{print $1*Number}' 或告诉他忽略 NaN 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68130809/

相关文章:

pandas - 设置 pandas 索引单元格的背景颜色

python - 如何在 python 数据框中做季度?

algorithm - K个桶中N个对象的所有可能组合

github-actions - 如何获取用户名,负责在 github 操作中触发工作流

c++ - 尝试将函数作为参数传递时出现 "no suitable constructor exis

flutter - 如何将 'Function' 类型的参数分配给 'void Function()

python - 如何在 python 中从 json 获取输入的随机回复

node.js - 如何使用 cmd 更新 Node.js?

kubernetes - 无法使用 Terraform 为 AKS 集群创建命名空间,报告没有此类主

android - 使用导航组件为每个 fragment 自定义工具栏