1.打印出当前文件大于10K的文件名
#! /bin/bash #加上括号使得fileinfo可变成一个数组,如果没有加上(),则fileinfo就只是一个字符串 fileinfo=(`du -s /home/yhb/shell/*`); #获取数组的长度 length=${#fileinfo[@]}; for((i=0;i<${length};i=i+2)); do if [ "${fileinfo[i]}" -gt 10 ]; then echo ${fileinfo[i+1]}; fi done
注意:du的使用方法
参数-s 是汇总,即如果是一个文件夹,就会得到整个文件夹的大小
-k 是指文件大小以k的单位来显示
-m是指文件大小以M的单位来显示
-h是指以比较合理的大小单位来显示,注意,如果加上h参数,那么大小就会出现10k这样的字符串,而不是10,这样就不能以整数来比较了,所以这里不能加上h参数。
2.计算程序所执行的时间
在执行的程序前面加上time命令,比如想看文件test.csv未重复的行有多少,可用
- sort -u test.csv | wc -l
- cat test.csv | sort -u | wc -l
现在想比较下这两种方式哪种比较快,则可以
- time sort -u test.csv | wc -l
- time cat test.csv | sort -u | wc -l
结果分别为
5016727 5016727
real 8m44.435s real 10m1.697s
user 4m29.126s user 5m1.471s
sys 0m5.399s sys 0m9.218s
由此可以看到,第一种方式会比较快。
2.1awk使用变量
awk -F " " 'NR==1 {var=sprintf("%s",substr($1,2,19));printf "%s %s %s %s %s %d %s ",var,$2,$3,$4,$5,$6,$7} NR>1 {var=sprintf("%s",substr($1,1,19));printf "%s %s %s %s %s %d %s ",var,$2,$3,$4,$5,$6,$7}' Distinct.csv > DistinctTimeStamp.csv
其中-F是设定输入文件的分隔符。
用printf使输出分隔符为
2.2 awk使用外部变量
在使用awk进行shell脚本编写时,常常要引用外部变量,因要进行字符转义,很难写对,以下是具体方法。
str=Hello echo "Hello Yes No"|awk '{print " '$str' ",$1}' 运行结果: Hello Hello