• 有意思的记录shell(持续更新)


    1.统计重复行的个数

    sort uid.txt | uniq -c

    2.查看压缩文件

    cat *.gz | gunzip > 123

    3.查看2个文件的交集、差集

    comm用于比较两个有序文件,默认第一列为第一个文件独有的元素,第二列为第二个文件独有的元素,第三列为共有元素,语法:comm 选项 参数

    -1:不显示在第一个文件出现的内容

    -2:不显示在第二个文件出现的内容

    -3:不显示同时在两个文件中都出现的内容

    comm <(sort 1.txt| uniq) <(sort 2.txt | uniq)
    

    grep -F -f 1.txt 2.txt | sort | uniq

    两者交集,-F以行为单位进行查找,-f指明1.txt内容为要查找的pattern。

     grep -F -v -f 2.txt 1.txt | sort | uniq

    -v显示查找不到的元素,即1.txt独有的元素(1.txt-2.txt)

    4.sed使用

    替换一个目录下所有文件中的某个pattern:

    sed -i "s/pattern/newstr/g" `grep pattern -rl ./*`

    将pattern替换为newstr

    整行替换:

     sed -i 's/^flag.*$/flag : 0/g' file_name

    将以flag开头的行替换为flag : 0

    删除特定行:

    sed -i '/^列王的纷争/d' test1

    删除以列王的纷争开头的行

    sed -n '2,$p' test.txt

    打印test.txt的第二行到最后一行,$意为最后一行。-n表示不打印编辑行,不带n,每行会被打印2次。 

    5.算数计算

    expr/$(())只能用于整数的计算,浮点的计算可以使用awk,bc

    nn=`echo $linenum | awk '{print $1 * 0.01}'`

    awk求列和:

    awk -F"\t" 'BEGIN{total=0}{total+=$1}END{print total}'

    6.find使用

    find . -name '*.txt'

    查找当前目录下所有子目录下txt类型的文件

    nice -n 19 ionice -nr6 find buslog.* -type f -mtime +$i  -delete -print >> days_rm_log.log  2>&1 

    删除某些过期文件:mtime 表示最后修改时间,i表示第几天,可以用个循环,删除以前的多少天记录;nice/ionice用于命令降级,以免影响其他服务

    查找文件,找到后并进行其他操作。格式为:

    find path 参数 pattern -exec 命令

    find cache_log -name cache_log_*.log -exec rm -rf {} \;
    find rotate_group_log -name rotate_group.log -exec mv {} rotate_group_log/rotate_group.log.$yesterday \;

    其中{}是find命令的结果,用于输入参数传入下一命令;但是每个命令都要以\;结束

    7.查看端口占用进程

    netstat -anp | grep port
    lsof -i :port

    a:显示所有套接口;n:显示网络ip;p:显示pid和进程名

    查看占用端口port的进程

    lsof -p pid | grep IPv4
    lsof -i | grep pid

    以上2条命令都用于查看进程pid打开的网络连接

    8.进程间通信查看

    ipcs(interprocess communication facilities status):展示共享内存(-m)、信号量(-s)、消息队列信息(-q)

    ipcrm(remove an XSI message queue, semaphore set, or shared memory segment identifier)

    ipcrm [ -q msgid | -Q msgkey | -s semid | -S semkey | -m shmid | -M shmkey ]

    10.查找某进程

    ps -eo cmd | grep -x "bin/test"
    根据执行命令查找进程是否存活,避免根据名字查找的不规范。-x整行匹配, ps -eo只显示cmd

    11.shell读文件

    k=1
    while read line;do
            echo "Line # $k: $line"
            ((k++))
    done < $FILE
    echo "Total number of lines in file: $k"

    12.sort

    sort -k3 -nr app_downinfo2015-06-02.txt > app_sort
    文件按空格分割,第三列按照降序排列
    sort -t $'\t' -k2,2 down_0722_uniq 
    分隔符指定为tab,按第二列排序

    13.随机抽取若干行

    awk 'BEGIN{srand();while (n<500){num=int(rand()*30546)+1;if (!(num in a)) {a[num]=1;n++}}}NR in a' game_similar.txt > training_data.txt
    
    game_similar.txt共30546行,从中随机选择500行

    14.日期

    日期转换为时间戳
    date +%s
    date -d '2015-07-30 20:05:02' +%s
    分别获得对应的时间戳1438257971、1438257902

    时间戳转化为日期,如下获得2015-07-30 20:05:02
    date -d @1438257902 +"%Y-%m-%d %H:%M:%S"

    日期加减

    #20150816
    date -d '-30 days' +%Y%m%d
    #20150914
    date -d 'yesterday' +%Y%m%d
    #20150914
    date -d '-1 day' +%Y%m%d
    #20150916
    date -d '+1 day' +%Y%m%d

    15.xargs

    将前面的参数列表,一行一行的传给后面的命令
    cat test.txt | xargs -i date -d @{} +"%Y-%m-%d %H:%M:%S"
    把test.txt里每行的时间戳转化为日期,-i 选项告诉 xargs 用每项的名称替换 {},如果参数是在命令最后面的就不需要-i,如rm
     
    查找某路径下的文件内容
    find . -name "*.xml" | xargs grep "hadoop.tmp.dir"

    16.awk获取shell外部变量

    a=300
    awk -v b=$a 'BEGIN{print b}'

    17.正则表达式提取

    从log中提取versionCode字段
    grep -Eo "versionCode=[0-9]+" msearchgame.log

    18.shell for循环

    #1到10
    for i in `seq 10`
    do
    done
    #静态语言用法
    for ((i=1; i<= 10; ++i))
    do
    done
    #for in
    for i in {1..10}
    do
    done

    19. 字符串比较

     [ ] 是条件判断,–eq/–ne/-gt/-ge/–lt/-le用于整数的比较,那浮点数和字符串的比较呢?、
    #1.转义的比较符 \< \>
    [ 'a' \< 'b' ] && echo 'ok'
    [ 'abc' \> 'a' ] && echo 'ok'
    #2.双括号[[ ]]
    [[ 'a' < 'b' ]] && echo 'ok'
    [[ 'abc' > 'a' ]] && echo 'ok'
    [[ 3.5 < 7.6 ]] && echo 'ok'
    #字符串包含判断,是否包含wo
    [[ 'hello word' =~ wo ]] && echo 'ok'
    

    20.awk正则表达式

    awk '$0 ~ /^[1-9]/' subject
    

    打印以数字开头的行

    21.awk去重

    $0做为下标,没有出现的时候a[$0]为0,出现一次后就会+1

    awk '{if(! a[$0]++){print $0}}'
  • 相关阅读:
    团队项目——个人工作任务认领
    第八周进度总结
    Scrapy框架安装与使用(基于windows系统)
    《掌握需求过程》阅读笔记四
    《掌握需求过程》阅读笔记三
    《掌握需求过程》阅读笔记二
    《掌握需求过程》阅读笔记(一)
    MapReduce显示最受欢迎的Top10课程(按照课程编号)
    MapReduce处理数据1
    MongoDB Java操作
  • 原文地址:https://www.cnblogs.com/whuqin/p/4982037.html
Copyright © 2020-2023  润新知