功能
将某一目录下的所有文件分隔为相同行数的文件
实现
INDIR=./in
OUTDIR=./out
FILE_MAX_LINE=100000
CUR_LINE_NUM=0
CUR_MATCH_FILE_IDX=0
MSG_TPYE=ccr
# define and clear tmp file
TMP_FILE=$OUTDIR/get_match_file.tmp
rm -f $TMP_FILE
# split file
ls -lrt $INDIR | grep ^- | awk '{print $NF}'| while read filename
do
filepath=$INDIR/$filename
LINE_NUM=`wc -l $filepath | awk '{print $1}'`
CUR_LINE_NUM=`echo "$CUR_LINE_NUM+$LINE_NUM" | bc`
cat $filepath >> $TMP_FILE
while [ $CUR_LINE_NUM -ge $FILE_MAX_LINE ]
do
head -n $FILE_MAX_LINE $TMP_FILE > $OUTDIR/p${MSG_TPYE}.${CUR_MATCH_FILE_IDX}
sed -i '1,'${FILE_MAX_LINE}'d' $TMP_FILE
CUR_MATCH_FILE_IDX=`echo "$CUR_MATCH_FILE_IDX+1" | bc`
CUR_LINE_NUM=`echo "$CUR_LINE_NUM-$FILE_MAX_LINE" | bc`
done
done
# output last file
cat $TMP_FILE > $OUTDIR/p${MSG_TPYE}.${CUR_MATCH_FILE_IDX}
rm -f $TMP_FILE
结果

该脚本用于将指定目录下的所有文件按每100000行进行拆分,生成新的小文件。首先定义输入目录、输出目录、每个文件的最大行数,然后遍历输入目录,统计文件行数,将超过最大行数的文件内容追加到临时文件中。当临时文件行数达到最大值时,将其分割并保存到输出目录,同时更新临时文件。最后,输出剩余的临时文件内容到最后一个分割文件,并清理临时文件。
837

被折叠的 条评论
为什么被折叠?



