计算一行中所有数字的总和,并将输出打印到单独的文件中

时间:2013-12-06 12:19:47

标签: unix math awk while-loop

我想计算文本文件中一行中所有数字的总和,并将包含数字和每行总和的输出打印到单独的文件中。

input.txt: input.txt中

5S_rRNA 0       0       44      44      1       7
7SK     0       0       44      43      2       4
A1BG    0       0       0       0       0       0
ABCA9.AS1       0       0       0       0       0       0
ABCB1   0       0       1       0       0       0

output.txt的

5S_rRNA 0   0   44  44  1   7   96
7SK 0   0   44  43  2   4   93
A1BG    0   0   0   0   0   0   0
ABCA9.AS1   0   0   0   0   0   0   0
ABCB1   0   0   1   0   0   0   1

我试过了:

while read x2 x3 x4 x5 x6 x7
        do
                x=$((x2+x3+x4+x5+x6+x7))
        echo $x
done < input.txt > output.txt

但是我收到此错误消息:test_sum.sh:非法数字:5S_rRNA 我也试过

awk '$2+$3+$4+$5+$6+$7 {print $0}' input.txt > output.txt

但我得到0和1的负荷。

任何建议都会很精彩。 谢谢, 哈丽特

3 个答案:

答案 0 :(得分:1)

你快到了那里:

$ awk '{print $0,$2+$3+$4+$5+$6+$7}' file
5S_rRNA 0       0       44      44      1       7 96
7SK     0       0       44      43      2       4 93
A1BG    0       0       0       0       0       0 0
ABCA9.AS1       0       0       0       0       0       0 0
ABCB1   0       0       1       0       0       0 1

在你的情况下,

awk '{print $0,$2+$3+$4+$5+$6+$7}' input.txt > output.txt

答案 1 :(得分:1)

5S_rRNA 0       0       44      44      1       7

对于如上所示的行,脚本中的问题出现在:

while read x2 x3 x4 x5 x6 x7
      #7 items to read, you are using 6 variables.

以上就是您获得Illegal number: 5S_rRNA

的原因

将其更改为:

while read x1 x2 x3 x4 x5 x6 x7 
      # Add the last 6 items as you are doing.

答案 2 :(得分:0)

这是一个棘手的bash方式:

while read -a words; do
    echo "${words[@]}" $(IFS=+; echo "${words[*]:1}" | bc)
done < input.txt > output.txt
column -t output.txt
5S_rRNA    0  0  44  44  1  7  96
7SK        0  0  44  43  2  4  93
A1BG       0  0  0   0   0  0  0
ABCA9.AS1  0  0  0   0   0  0  0
ABCB1      0  0  1   0   0  0  1