我有一个文件,其列包含简单的算术方程,我想要合并到算术结果中。
输入示例(制表符分隔的列):
+104-1+12 6 +3我想计算每一列中的算术和。如果一列不包含算术符号,我将其视为在项之前包含一个+。虽然如果列以无符号开头(假设行从未以数字开头,如示例所示),添加+符号很容易(sed -E 's/(\t)([0-9]*)/\1\t+\2/g'将起作用)
我期望的输出如下:
115 6 3我如何在unix中实现这一点?优先考虑awk/sed解决方案。
发布于 2017-05-26 06:25:19
下面是一个全awk解决方案,它利用awk的功能将数字的字符串表示转换为数字表示,而不使用外部可执行文件:
awk -F"\t" \
'BEGIN { OFS="\t" }
{ gsub(/-/,"|-")
gsub(/\+/,"|")
for(i=1; i<=NF; i++) { ## iterate over columns
num_parts=split($i,parts,"|")
for(j=1; j<=num_parts; j++) ## iterate over arithmetic expression parts
sums[i] += parts[j]+0 ## Adding zero marshals the string into a numeric
}}
END{
for(i=1; i<=NF; i++) {
if(i>1) printf OFS
printf sums[i]
}
print "" }' filehttps://unix.stackexchange.com/questions/363896
复制相似问题