我想计算文本文件中一行中所有数字的总和,并将包含数字和每行总和的输出打印到单独的文件中。
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的负荷。
任何建议都会很精彩。 谢谢, 哈丽特
答案 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