shell笔记

shell时间循环

#!/bin/sh
if [ $# == 2 ]; then
    datebeg=$1
    dateend=$2
else
    echo "请输入开始时间和结束日期,格式为2017-04-04"
    exit 1
fi

beg_s=`date -d "$datebeg" +%s`
end_s=`date -d "$dateend" +%s`

echo "处理时间范围:$beg_s$end_s"

while [ "$beg_s" -le "$end_s" ];do
    day=`date -d @$beg_s +"%Y-%m-%d"`;
    echo "当前日期:$day"
    beg_s=$((beg_s+86400));
done

echo "日期全部处理完成"



# 改进的方式
statime=$(date -d"2018-05-01" +"%s")
endtime=$(date -d"2018-06-01" +"%s")
for i in $(seq $statime 86400 $endtime);do
    date -d@$i +"%Y-%m-%d"
done

shell目录循环

function dir_do () {
    cd $1
    # 找到目录当中最大的文件
    du -s * | sort -nr | head -1 | awk -F'.' '{print $NF}'
}

function scan_and_do() {
    for one in $(find $1 -maxdepth 1 -type d);do
        (dir_do $one)
    done
}

# 非并发形式
scan_and_do ./videos

# 并发的形式
export -f dir_do
find ./videos -maxdepth 1 -type d | parallel dir_do {}

awk

# 求数字之和
cat * | grep -oE "[0-9]+" | awk '{sum += $1} END{print sum}'

# 统计频数分布
cat * | awk '{a[$filednum]++}END{for(i in a){print i, a[i]}}' | sort

删除匹配行的上一行

# 删除sedfile匹配翻译人员的上面一行
sed -i -e :a -e '$!N;s/.*\n\(.*翻译人员\)/\1/;ta' -e 'P;D' sedfile

你可能感兴趣的:(DevOps)