1. awk
awk -F ',' '{print $NF, $(NF-1)}' ##F 是field
2. sed 's/a1/a2/g'
1) 批量替换多个文件中的字符串命令如下:sed -i “s/原字符串/新字符串/g” `grep 原字符串 -rl 所在目录`
例如:我要把 charset=gb2312 替换为 charset=UTF-8
sed -i “s/charset=gb2312/charset=UTF-8/g” ‘grep charset=gb2312 -rl /www’
解释一下:
-i 表示inplace edit,就地修改文件
-r 表示搜索子目录
-l 表示输出匹配的文件名
这个命令组合很强大,要注意备份文件。
例2
数据 test1.TXT: 541187434656[\002]真彩钢笔FP6328学生
要求更换分隔符: 把[\002] 替换为 |
cat test1.TXT| sed "s/002]//g" |sed "s/\[//g" |sed "s/\\\/|/g"
1st sed: 把 002] 替换为空
2nd sed:把[ 替换为空,需要对[转义 \[
3rd sed: 把\ 替换为 |, 需要两个反斜杠转义 \\\
2) 去掉文件中的所有空格
3. wc -l
4. regexp_extract
5. 压缩与解压
tar -zvcf .tar.gz / tar -ztvf
gzip / gunzip
zcat 压缩包 可以阅读压缩包
6. 删除
rm -r part\=2016-08-23/ r 递归 特殊字符加上\转义
rm -v v 显示删除内容
rm -rf 强制删除文件夹及其内容
cp -R 可以复制整个文件夹
mv 可以重命名文件
7. 查看磁盘使用情况
df -lh
8. 获得一个路径下面的文件夹名
ls –l $path|awk ‘/^d/ {print $NF}’
#获得一个路径下面的文件名
1) 不包含路径
ls –l $path|awk ‘/^-/ {print $NF}’
2) 包含路径
find $path –name “*.*”
find $path ## 输出file和folder(包含路径)
9. 变量和数值加减
I=$((NUM+1))
I=`expr $NUM +1`
10. 读取文件除第一行之外的记录
ls –l|sed ‘1d’
11. 取字符串变量的第几位的值
var=’abcder’
a=${var:0:1} --a
b=${var:1:2} --bc
c=${var:1:1} --b
12. 查看后台任务,kill
ps -au
ps -ef 查看 nohup的后台任务
kill -9 pid 杀死某个进程id
13. ulimit / error: too many open files
max open files 查看 ulimit -n,机器一般缺省默认为1024
当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。
改大方式:
1)ulimit -SHn 65535 等效于 ulimit -n 65535,这是即时修改方式,重启后失效。
2)在/etc/rc.local 中增加一行 ulimit -SHn 65535
3)在/etc/profile 中增加一行 ulimit -SHn 65535
4)在/etc/security/limits.conf最后增加如下两行记录
* soft nofile 65535
* hard nofile 65535
14 退出命令:
退出ssh: exit
退出mysql:quit
退出虚拟机:deactivate
15 日志
log_file="/root/BI_scripts/logs"/"$TODAY".log exec 1>>$log_file exec 2>>$log_file
1是成功日志,2是失败日志
16 输出空格
echo -e '\n'
17 当前日期与时间
#当前时间 local curtime; curtime=`date +"%Y-%m-%d %H:%M:%S"` #当前日期 TODAY=$(date +%Y%m%d)
endTime=$(date +%s) endDateTime=$(date -d @$endTime) diff=$(($endTime-$startTime)) echo "Step2: 存储执行完成: $endDateTime" echo "耗时: $(($diff / 60)) minutes and $(($diff % 60)) seconds."
18 crontab
crontab -e
crontab -l
定时任务格式
#30 6 * * * nohup sh /data/admin/adsprecise/sources/transfers.sh tb_plan_click &
19. 保存日志
#添加日志文件 auto_deploy.log 目录是test/logs/ date=$(date +%Y%m%d) log_file="logs/auto_deploy_"$date".log" echo echo 'Executing... Pls check process details in log file test/logs/auto_deploy.log' exec > $log_file 2>&1
20. 判断是否存在
1) 判断入参是否存在
#判断输入参数是否齐全 #参数1 if [ $1 ] && [ $2 ] && [ $3 ] then sql_folder=$1 && echo "参数1 ready:"$sql_folder hospital=$2 && echo "参数2 ready:"$hospital state=$3 && echo "参数3 ready:"$state else echo -e "Error:参数缺失,请提供入参,重新执行!\n需要3个参数:脚本目录、指定医院(zr\xw\other)、是否启用细指标(1关闭 2开启)" fi
2)判断文件是否存在
if [[ -f objects.txt ]] then rm -f objects.txt fi
3) 判断文件夹是否存在
#判断是否存在相应文件夹 if [ ! -d "$version" ]; then mkdir $version && echo "文件夹${version}创建ok." else rm -rf $version && mkdir $version && echo "文件夹${version}重新创建ok." fi
21. if else 语句
- 括号前后必须有空格
- 注意单括号和双括号的问题
if [[ $part == "ind" ]] #如果是变量,也可以双括号[[ 不需要双引号 then echo "right1" elif [ "$part" == "VTE" ] #如果是变量,单括号[ + 双引号 then echo "right2" elif [ 1 == 1 ] #如果是常量,可以用单括号[ then echo "right3" else echo "end" fi
22. vi撤销编辑
撤销操作:u 恢复操作:ctrl+r