AWK命令添加值

时间:2019-03-28 11:19:51

标签: unix

我有一种情况,我试图在一行中添加三个字段,并在输入文件中收到它。我写了一些我认为没有遵循最佳Unix惯例的东西,并且需要一些建议来尽可能地写出最好的东西。附上我的示例行。

我的问题是:

  1. 是否可以使用一个awk命令添加所有三个字段?
  2. 输入文件可能不包含其中某些字段(根据情况而定),awk能够处理吗?我应该检查吗?
  3. 有时值的末尾可能包含“〜”,如何仅考虑数字?

输入文件1采样行

CLP*4304096*20181231*BH*0*AH>444*158330.97~*FB*0*SS>02*0*SS>03*0*J1*0~

输入File2示例行

CLP*4304096*20181231*BH*0*AH>444*158330.97*FB*0

我写的脚本

 clp=$(awk -F'[*]' '/CLP/{print $7}' $file)
 ss02=$(awk -F'[*]' '/CLP/{print $11}' $file)
 ss03=$(awk -F'[*]' '/CLP/{print $13}' $file)
 clpsum=clp+ss02+ss03

我知道这不是最好的方法,请让我知道如何同时处理输入文件1(具有158330.97〜)方案和文件2方案。

谢谢!

1 个答案:

答案 0 :(得分:0)

在1个awk命令中:

awk 'BEGIN{FS="*"}{var1=$7;var2=$11;var3=$13; var4=var1+var2+var3; printf("var4 = %.2f\n",var4)}' file.txt

只要字段相同,

就可以工作〜如果您想在文件带有不同字段中的数字的情况下处理文件,则可能希望有人提供更可靠的答案〜etc。希望这对您有所帮助。