您的位置:首页 > 运维架构 > Shell

查找文件,解压缩,合并成一个大文件——一个shell脚本

2017-01-16 01:09 369 查看
需求:

有一堆文件乱七八糟的,但是给定一个类似后缀的小字符串,根据这个字符串,查找出所有文件,将这些文件改名(因为是压缩文件,但是后缀不是GZ),解压缩,然后合并成一个大文件。

#!/bin/bash
echo "I will combine files with $1"

#给定一个字符串,在当前目录下建立此字符串命名的目录
newdir="`pwd`/$1/"
mkdir $newdir
echo "New directory $newdir create successful."

#查找所有包含这个字符串的文件,存到数组中
array_files=(
`find -name "*$1*" -type f`
)

#拼接新的文件,给定的字符串加上文件名中的日期
substrlength=${#array_files[0]}
substr=${array_files[0]:($substrlength-4):4}
newfilename="$1.$substr"
echo $newfilename

#获取存文件名的数组的目录,做循环处理
array_length=${#array_files[*]}
for((i=0;i<$array_length;i++))
do
echo "Found file ${array_files[$i]}"

#根据全路径获取文件名
filename=`basename ${array_files[$i]}`

#复制到新建的目录下,并且解压缩
cp ${array_files[$i]} "${newdir}${filename}.gz"
gzip -d "${newdir}${filename}.gz"
echo "Copy and decompress successful. Write into new file..."

#通过一个awk来获取文件的字段数
fields=`awk '{if (NR==2)exit;A=NF;print A}' ${newdir}${filename}`

#将文件写入新的文件中
awk -vA=$fields '{if(NF==A)print $0}' ${newdir}${filename} >>$newfilename
done

echo "Process complete."
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  linux shell