bash: iterating through txt file lines can't read last line

笑着哭i 提交于 2019-12-01 22:09:51

问题


while read p; do
echo $p
done < file.txt

this code can read all lines in the file.txt except the last line any ideas why. Thanks


回答1:


if youre in doubt about the last \n in the file, you can try:

while read p; do
echo $p
done < <(grep '' file.txt)

grep is not picky about the line endings ;)

you can use grep . file.txt for skipping empty lines...




回答2:


Well last line does not contain the newline character, as the other answers have pointed out. But the read command actually sets the p variable, and then instead of returning a success, returns an end of file error. So this error stops the loop from getting executed. You can still use the p variable which contains the last line from the file

while read -r p || [[ -n "$p" ]]
do
echo $p
done < file.txt

This puts 2 conditions to be tested, as with or, only if the first fails, the second gets executed. So, when the last line will cause an end of file error in read, we will check if the p is set or not. If yes, we will use that.




回答3:


cat file.txt and see if the very last line has a new line at the end of the last line or not. If it does not then while read p ; do echo $p done < file.txt won't echo the last line put a new-line at the end of the last line in the text file



来源:https://stackoverflow.com/questions/16627578/bash-iterating-through-txt-file-lines-cant-read-last-line

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!