与另一篇文章相关我有... parsing a sql string for integer values with multiple delimiters, 在哪里我可以很容易地完成与UNIX工具(ahem)相同。我发现它比预期的更杂乱。我正在寻找awk解决方案。对以下内容有何建议?awk:计算从单个字段中的值与多个分隔符的总和
这是我原来的职位,转述:
#
我想用awk来解析从平面文件,它是管道分隔源数据。其中一个字段的格式如下。我的最终状态是对字段中的整数进行求和,但我的问题在于查看使用awk对字段中的数值求和的方法。子格式的模式将始终在希望的整数前面加一个代字号(〜),后面加一个星号(*),除了字段中的最后一个。子字段的数量也可能会有所不同(我的示例有5个,但可能更多或更少)。 4个字符的TAG名称并不重要。
所以这里是一个示例:
| GADS〜55.0 * BILK〜0.0 * BOBB〜81.0 * HETT〜32.0 * IGGR〜51.0 |
从这个例子中,我想要处理的是最后一个数字219.同样,我可以将总和部分作为下一步;只是对获取数字感兴趣。
#
我的解决方案目前需要执行两个awk的语句。首先使用gsub在目标字段中用'*'分隔符替换'〜',77:
awk -F'|' 'BEGIN {OFS =“|”} {gsub(“〜”,“*”,$ 77); print}'file_1> file_2
我的第二个awk语句是计算目标字段77上的数字总和,它是最后一个字段,并将其替换为计算值。它建立在文件中其他地方不会有其他星号(*)的假设之上。我没关系。它适用于大多数例子,但不适用于其他例子,我的直觉告诉我这不是一个可靠的答案。有任何想法吗?我在另一篇关于SQL的建议很棒,但我无法实现它们的原因是无关紧要的。
awk -F'*''{if(NF> = 2){s = 0; for(i = 1; i < = NF; i ++)s = s + $ i;打印SUBSTR($ 1,1,长度($ 1)-4)S;}其他打印}” file_2> file_3
[编辑]你的问题解决掉所有的内联历史,只是后您的当前问题包括[MCVE]以简洁,可测试样品的输入和预期的输出。 –