我在使用bash脚本读取文件时遇到了一些麻烦。
这是我想要阅读的文件:
--------------- (not in the file)
123.234 231.423
1223.23 132.134
--------------- (not in the file)
在此文件中,4个数字位于两条不同的行上,并且文件末尾有一行留空。每行末尾没有“空格”字符。
当我尝试使用此脚本读取此文件时:
for val in $(cat $myFile)
do
echo "$val ";
done
我确实有以下结果:
123.234
231.423
1223.23
32.134
当我在变量后添加空格字符时,它会删除最后一个数字的开头
for val in $(cat ~/Windows/Trash/bashReadingBehavior/trashFile.out)
do
echo "$val ";
done
输出:
123.234
231.423
1223.23
2.134
实际上,在最后一个数字之后添加的字符会写在最后一个数字的开头。我认为这是一个由不可见的字符引起的行为,如回车或类似的东西,但我无法弄清楚如何解决这个问题。
答案 0 :(得分:3)
您的输入文件有DOS行结尾。执行时
echo "$val "
$val
的值以回车结束,当打印时,将光标移动到打印最后两个空格之前的行的开头,这可以覆盖行上已有的任何内容。
您应该使用以下代码从此文件中读取(不要遍历cat
的输出):
while read; do
REPLY=${REPLY%$'\r'} # Remove the carriage return from the line
for val in $REPLY; do
echo "$val"
done
done
使用我显示的for
循环对一行进行迭代也不是真的值得推荐,但在这种情况下,如果从文件中读取并存储在REPLY
中的行是已知是以空格分隔的数字列表。