shell笔记

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

 程序猿必读

原文地址:https://www.cnblogs.com/longzhongren/p/4319915.html