当前位置: 技术问答>linux和unix
请教:文件描述符可以是变量么
来源: 互联网 发布时间:2017-01-01
本文导语: 写了一个文件分割程序,但太慢了: while read aLine do hashnum=`echo $aLine|awk '{print $1}'|Hash $3` #echo $hashnum fileid=`echo $hashnum|awk '{printf("%02d", $1)}'` outfile=$2/${filename}_${fileid} if [ -f $outfile ]; then echo $aLine >>...
写了一个文件分割程序,但太慢了:
while read aLine
do
hashnum=`echo $aLine|awk '{print $1}'|Hash $3`
#echo $hashnum
fileid=`echo $hashnum|awk '{printf("%02d", $1)}'`
outfile=$2/${filename}_${fileid}
if [ -f $outfile ]; then
echo $aLine >>$outfile
else
echo $aLine >$outfile
fi
done $outfile
iFileDes=`expr $iFileDes + 1`
done
while read aLine
do
hashnum=`echo $aLine|awk '{print $1}'|Hash $3`
fileid=`echo $hashnum|awk '{printf("%02d", $1)}'`
fileid=`expr $fileid + 3`
echo $aLine>&${fileid}
done &-
iFileDes=`expr $iFileDes + 1`
done
结果是exec $iFileDes>$outfile无法执行:exec: 3: not found
请教高手:
1)如何使用变量(大于等于3的整数)做文件描述符
2)如果不行,有没有别的写多个文件的比较快方法?我要分割的文件大概有5G,想根据第一个域的hash值的不同分割成10个以上的文件。
谢谢~
while read aLine
do
hashnum=`echo $aLine|awk '{print $1}'|Hash $3`
#echo $hashnum
fileid=`echo $hashnum|awk '{printf("%02d", $1)}'`
outfile=$2/${filename}_${fileid}
if [ -f $outfile ]; then
echo $aLine >>$outfile
else
echo $aLine >$outfile
fi
done $outfile
iFileDes=`expr $iFileDes + 1`
done
while read aLine
do
hashnum=`echo $aLine|awk '{print $1}'|Hash $3`
fileid=`echo $hashnum|awk '{printf("%02d", $1)}'`
fileid=`expr $fileid + 3`
echo $aLine>&${fileid}
done &-
iFileDes=`expr $iFileDes + 1`
done
结果是exec $iFileDes>$outfile无法执行:exec: 3: not found
请教高手:
1)如何使用变量(大于等于3的整数)做文件描述符
2)如果不行,有没有别的写多个文件的比较快方法?我要分割的文件大概有5G,想根据第一个域的hash值的不同分割成10个以上的文件。
谢谢~
|
split 命令切割文件。
split [--help][--version][-][-b ][-C ][-l ][要切割的文件][输出文件名]
不过还是可能很慢,毕竟5G的数据读写到硬盘的时间应该短不了。
|
试试dd命令
|
使用脚本读入文件,在每行处理,肯定很慢,试试1楼的dd命令吧