最后一行文件被截断
这是我的代码:
#!/bin/bash
filetouse=$1
while read -r STUDENTID FIRST LAST C1 C2 C3
do
totalSum=$(expr $C1 + $C2 + $C3)
average=$(expr $totalSum / 3)
printf '%d [%d] %s, %s\n' "$average" "$STUDENTID" "$LAST" "$FIRST"
done < "$filetouse" | sort -k 3,3n -k 4,4n -k 2,2g
预期产出=
71 [299226663] Camp, Laney
80 [434401929] Camp, Skyler
81 [199144454] Camp, Tracey
93 [928441032] Forester, Chris
82 [928441032] Forester, Jess
92 [888111818] Forney, JC
82 [123456789] Johnson, Lee
99 [290010111] Lee, Terry
91 [999999999] Smith, Jaime
实际产出=
71 [299226663] Camp, Laney
80 [434401929] Camp, Skyler
81 [199144454] Camp, Tracey
82 [928441032] Forester, Jess
92 [888111818] Forney, JC
82 [123456789] Johnson, Lee
99 [290010111] Lee, Terry
91 [999999999] Smith, Jaime
我从代码中注意到
82 [928441032] Forester, Jess
缺少。它也发生在文件的最后一行。但我不确定为什么最后一行被截断。
文件我使用= testing.sh
123456789 Lee Johnson 72 85 90
999999999 Jaime Smith 90 92 91
888111818 JC Forney 100 81 97
290010111 Terry Lee 100 99 100
199144454 Tracey Camp 77 84 84
299226663 Laney Camp 70 74 71
434401929 Skyler Camp 78 81 82
928441032 Jess Forester 85 80 82
928441032 Chris Forester 97 94 89
答案 0 :(得分:0)
我在没有修改的情况下运行你的脚本,得到了这个:
#./script.sh input.txt
71 [299226663] Camp, Laney
80 [434401929] Camp, Skyler
81 [199144454] Camp, Tracey
82 [123456789] Johnson, Lee
82 [928441032] Forester, Jess
91 [999999999] Smith, Jaime
92 [888111818] Forney, JC
93 [928441032] Forester, Chris
99 [290010111] Lee, Terry
确实显示93的那个。
答案 1 :(得分:0)
我尝试了你的输入文件和脚本,得到了正确的结果。
我也尝试过更改输入文件格式: 1)“DOS CRLF”将使脚本显示错误消息。 2)最后一行新行也会使脚本显示错误信息。
您最好使用-x
选项来显示在PC上运行脚本时发生的事情。
请运行“echo $ IFS”以显示bash是否正确处理换行符。