使⽤shell脚本实现⽂本拆分需求说明
在bash中,我们可以使⽤split命令轻松实现⽂本的拆分。现在增加两点需求:
1. 在每份拆分⽂件的头部插⼊title,便于查看。
2. 拆分⽂件的名称为源⽂件名称前加编号,如。
总体思路
1. 执⾏split命令,把源⽂件按指定⾏数拆分成若⼲⼩⽂件。
2. 遍历这些⼩⽂件,并创建名称符合要求的拆分⽂件,然后插⼊title并拷贝⽂件内容。
具体步骤
1. ⾸先执⾏如下命令,⼈⼯造出⼀个包含9999⾏的⼤⽂件。
echo"" | awk'BEGIN{for (i = 0; i < 9999; i++) print(201503200001+i)".jpg"}' >
2. 假设指定⾏数为3000,执⾏如下命令,这个⽂件将被拆成4个⼩⽂件。
split -l
得到的4个⼩⽂件名称分别为xaa, xab, xac, xad。
3. 现在逐个创建名称符合要求的⼩⽂件,并往⽂件中存内容,像下⾯这样:
echo"#photo_file_name">
cat xaa>>
4. 最好能把冗余的⽂件删除,因此在完成第3步后执⾏rm xaa命令。
5. 主体已经有了,现在需要把它们拼起来形成⼀个shell脚本。
创建脚本⽂件split.sh并在vi中打开:
touch split.sh
chmod +x split.sh
vi split.sh
编辑split.sh,输⼊以下内容:
#!/bin/bash
# 1. 参数检查
if [ $# -ne 2 ]; then
echo -e "wrong parameter\nUsage: $0 filename linecount";
exit 1;
fi
# 2. 拆分⽂件
# 2.1清掉可能的旧⽂件
rm -f x??
rm -f *.$1
# 2.2执⾏拆分
split -l $2 $1
# 3. 遍历⼩⽂件
xfiles=$(ls x??)
index=1
for current_file in $xfiles; do
new_file=$index.$1
touch $new_file
# 写⼊title和内容
echo"#photo_file_name">$new_file
cat $current_file>>$new_file
# 删除冗余⽂件
rm -f $current_file
# 打印⼩⽂件摘要
echo"~~~ $new_file";
head -3 $new_file
echo"......"
tail -2 $new_file
echo""
# ⽂件索引加1
index=$(($index+1))
done
运⾏效果
widea@cnblogs:~/demo $ ./split. 3000
~~~
#photo_file_name
201503200001.jpg
201503200002.jpg
shell创建文件并写入内容......
201503202999.jpg
201503203000.jpg
~~~
#photo_file_name
201503203001.jpg
201503203002.jpg
......
201503205999.jpg
201503206000.jpg
~~~
#photo_file_name
201503206001.jpg
201503206002.jpg
......
201503208999.jpg
201503209000.jpg
~~~
#photo_file_name
201503209001.jpg
201503209002.jpg
......
201503209998.jpg
201503209999.jpg
widea@cnblogs:~/demo $ ls
  split.sh
⼩提⽰
1. shell脚本对空格敏感,赋值时不能留空格,⽐如xfiles = $(ls x??)就是错误的。
2. 变量的引⽤必须⽤$符号。
3. 当出现syntax error: unexpected end of file错误,请把注意⼒放在syntax error,⼤多数情况下是脚本语法错误。(当然也不排除⽂件格式的问题,可在vi中输⼊:set fileformat查看⽂件格式是否为unix。)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。