1)当我需要将当前目录的文件解压到指定目录data_bi下面并重命名为t_org.txt
gunzip -c t_org.txt.gz > /data_bi/t_org.txt
如果解压到当前文件夹的话gunzip解压后的文件会将压缩包替换掉,所以为了保留压缩包将文件解压到另一个folder中
2). 当将txt文件通过etl工具导入数据库的时候吧,某一行数据报错,想查看具体某行数据情况,
查看一个文件的某几行内容: sed -n '1206264,1206266p' t_app1.txt;
-n后面的2个数字是具体的行号
3). grep -n "xxx" str.txt 查看某个指定内容在文件的哪一行
4).建议在管道符“|”和两侧的命令之间使用空格,增加代码的可读性
5)touch命令可以用来创建文件,,变更,更改文件时间。
touch -c a.txt -c选项可以避免创建一个新的文件,并用当前时间更新文件的时间戳。
-m改变文件的修改时间访问时间不变。
6).mkdir -p 命令可以自动创建所有还不存在的父目录
创建文件的时候并授权: mkdir -p -m 777 backup/old(创建一个任何人都有读写权限的目录)
7)项目中使用shell场景,使用oracle sqlloader向oracle数据库导入数据,读取linux服务器指定目录的txt文件,文件需要解压,基于以上需求的shell脚本
##############################读取ctl文件列表获取ctl名,txt文件列表获取txt文件名,替换ctl文件第二行###################
部分脚本:
Template_DATA_Path="/ora01/$date1"
Source_File_Path="/ora01/$date1" ##数据文件所在路径
File_Control_Path="/ora01/ctl_template" ##控制文件所在路径
cd $File_Control_Path ##切换目录
ctl_count=`find *.ctl |wc -l`; ###查找$File_Control_Path目录下ctl文件的个数
source_file_count=`ls $Source_File_Path/*.txt |wc -l`; ###查找$Source_File_Path下txt文件个数
if [ $ctl_count -ge 1 ] ;then ##判断ctl文件个数是否大于1
if [ $source_file_count -ge 1 ]; then ###判断txt文件个数是否大于1
for ctl_file in $(ls -l $File_Control_Path | find *.ctl ); ###
do
##echo $ctl_file ;
for source_file in `ls -l $Source_File_Path |awk '{print $9}' |sed -e '/^$%/d'`;
do
if [ `cat $ctl_file | sed -n 2p | grep $source_file |wc -l` -eq 1 ]; then --txt文件名在对应的ctl文件第二行出现
echo $source_file "-----"$ctl_file ;
fi
## echo `$source_file |awk -F ".txt" '{print $1}'`;
##待测试 sed -i '2s/$line/$newname/g' $Source_File_Path/$line
done
done
elif [ $(ls $Source_File_Path|find *.txt.gz |wc -l) -ge 1 ] ; then ##tested
for line in `ls -l $(Source_File_Path)|find *.txt.gz`;
do
gunzip -f $Source_File_Path/$line ; ##强制解压即二次解压时直接覆盖第一次解压后的文件
done
else
exit 1;
fi
fi;
以上demo如有任何问题请指正