⼀.在Linux中for和cat遍历⽂件内容出现nospace
以前使⽤for var in file⽅式逐⾏读取⽂件内容的时候,都没有出现问题,但是今天使⽤如下代码,会出现“no space” ,⽬标数据⽂件内容为6.8M,
# 写⼊临时⽂件,第⼀⾏不能写⼊
fillTempFile(){shell创建文件并写入内容
# 先删除临时⽂件,再创建
rm -rf $fullTempFileName
touch $fullTempFileName
i=0
for line in $(cat $targetFilePath$1)
do
# 去掉第⼀⾏数据
if [ $i -gt 0 ]
then
# 解析从第4位开始的数据,即为当前备注的数据⾏数
echo $line >> $fullTempFileName
fi
# 遍历完⼀⾏之后,⾏号加1
let i+=1
done
}
造成这个问题的原因是:我使⽤的是AIX系统(/bin/ksh ksh88的栈系统很低效)。当使⽤for i in $targetFile的时候,系统会读取整个⽂件到栈系统中,造成当前系统内存溢出。
但是另外⼀个AIX系统的另外⼀个版本ksh93使⽤的是另外⼀种很⾼效的库,也就不会发⽣这个问题。其他⼀些shell,⽐如bash,在处理⼤数据量⽂件的时候更加⾼效。
但是ksh88是AIX系统的默认版本,系统⼯具、SMIT等都是使⽤ksh88。
解决这个问题的办法是避免使⽤冗余的⽅式,⽽是逐步加载,如下:
# 写⼊临时⽂件,第⼀⾏不能写⼊
fillTempFile(){
# 先删除临时⽂件,再创建
rm -rf $fullTempFileName
touch $fullTempFileName
i=0
cat $targetFilePath$1 | while read line
do
# 去掉第⼀⾏数据
if [ $i -gt 0 ]
then
# 解析从第4位开始的数据,即为当前备注的数据⾏数
echo "{$line}" >> $fullTempFileName
fi
# 遍历完⼀⾏之后,⾏号加1
let i+=1
done
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论