最后一行文件被截断

时间:2016-09-09 05:52:10

标签: linux bash shell unix

最后一行文件被截断

这是我的代码:

#!/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

2 个答案:

答案 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是否正确处理换行符。