shell脚本常用命令
awk
awk 选项 '模式或条件 {操作}' 文件 1 文件 2 ...
常用的内部变量:
NF: 字段个数
NR: 当前的行号
awk 'NR==1,NR==3 {print $1}' demo.txt # 输出一到三行
awk '(NR==1)&&(NR==3) {print $1}' demo.txt # 输出第一行和第三行
awk 'BEGIN {x=0};/^hello/{x++};END {print x}' demo.txt # 统计以hello开头的行数
第三个是比较完整的用法。有BEGIN,有限制条件,有循环体,有END。
shell脚本数组@和*的区别
"${数组变量[*]}": 加上双引号,bash会当成是一串字符串处理
${数组变量[*]}: 不加上双引号,bash会当成是数组处理
${数组变量[@]:加不加双引号bash都是当成数组处理
sort和uniq
sort是对输出内容进行排序,uniq是对输出内容的相邻行进行去重。
sort -u demo.txt # 对demo.txt排序去重
uniq -c demo.txt # 对相邻行进行去重计数
uniq -d demo.txt # 显示相邻行重复的结果
xargs
将结果作为参数进行执行
find -name '*.log' -print0 | xargs -0 rm # 找到.log结尾的文件,拼接\0,执行的时候按\0进行分隔,然后删除文件