我有一个名为“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
因为:
下面是以上两个与发布的示例输入一起使用:
$ 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/