工作中用到Shell脚本一般不是太复杂,会有一些即时的统计计数、文件查看。总结一些语句,方便在自己遗忘时查看。
- 查看文件占用空间大小
du -sh * | sort -rh #按从大到小的顺序排
du -sh * | sort -h #按从小到大的顺序排
- 统计文件行数
wc -l filename
- 删除文件的1-7行,在原文件上修改
sed -i '1,7d' filename
- 查看文件的某一行并提取该行的最后一列,如第1845行
sed -n 1845p filename
cat filename | awk 'NR==1845' | awk '{print $NF}'
- 查看文件的3000行到4000行
cat filename | head -n 3000 | tail -n +1000
- 提取文件中某一列符合要求的行
cat filename | awk '$4 == "n37" {print}'
- 提取文件中某几列符合要求的行到新文件
cat filename | awk '{if($2 == 99)print}{if($2 == 163)print}' | awk '{print $3"\t"$4"\t"$4+38}' > newfile
- 计算文件最后一列的和并输出
awk '{sum +=$NF}; END {print sum}' filename
- 计算文件每行的和并输出为一个列向量
awk '{for (i=1; i<= NF; i++) sum += $i;print sum;sum=0;}' filename > newfile
- 删去文件1的最后几行使其与文件2行数一致,存为文件3
long=$(sed -n ' $=' filename1)
short=$(sed -n ' $=' filename2)
sed $ (( $short+1)), ${long}d filename1 > filename3
- 删除文件的后3行
tac filename | sed 1,3d | tac > newfile
sed ' $d' filename | sed ' $d' |sed ' $d' > newfile
- 计算文件第一列有哪些不同值并输出/对文件排序去重后输出为新文件
cat filename | awk '{print $1}' | sort | uniq -c
sort -k1,1 -k2,2n filename | uniq > newfile
- 输出文件第一列的最大值/最小值
cat filename | awk 'NR == 1{max=$1;next}{max=max>$1?max:$1}END{print max}'
cat filename | awk 'NR == 1{min=$1;next}{min=min<$1?min:$1}END{print min}'
- 批量清除任务
ps -ef | grep taskscriptname | cut -c9-15 | xargs kill -9
- 提取含关键字的行相关命令
#提取含real的行输出其第二列,每三个写入一行中
grep -n -E 'real' nohup.log | awk '{print $2}' | awk '{if(NR%3!=0)ORS=" ";else ORS="\n"}1' > time3.log