• Linux 小技巧1



    一. 统计文件的总行数

    ⏹非压缩文件

    • 统计当前文件夹下csv文件的行数
    wc -l ./*.csv
    
    • 1
    • 统计指定文件夹下csv文件的行数
      • -maxdepth 2:指定查找的文件夹的层级
    find ./ -maxdepth 2 -type f -name *.csv | xargs wc -l
    
    • 1

    ⏹压缩文件

    • 使用zact命令,可在不解压的情况下直接查看压缩文件的内容
    zcat ./*.csv.zip | nkf -w8 | wc -l
    
    • 1
    • 若存在多个zip文件,可先将每个zip文件的行数输出到一个文本文件中
    • 然后使用awk命令进行合计;或者复制到Excel中进行合计
      • awk '{sum += $1} END {print "总和:", sum}' ./result.txt
    # 获取出当前路径下的zip文件
    fengyehong@ubuntu:~/jmw_work_space/20240421$ ls -l *.zip
    -rw-rw-r-- 1 fengyehong fengyehong 197454 Apr 21 02:16 CBC_SystemLog.log.zip
    -rw-rw-r-- 1 fengyehong fengyehong    484 Apr 21 02:10 file1.txt.zip
    -rw-rw-r-- 1 fengyehong fengyehong    464 Apr 21 02:11 file2.txt.zip
    
    # 获取出zip文件的绝对路径
    fengyehong@ubuntu:~/jmw_work_space/20240421$ ls *.zip | sed "s:^:`pwd`/:"
    /home/fengyehong/jmw_work_space/20240421/CBC_SystemLog.log.zip
    /home/fengyehong/jmw_work_space/20240421/file1.txt.zip
    /home/fengyehong/jmw_work_space/20240421/file2.txt.zip
    
    # 使用vi编辑脚本文件
    fengyehong@ubuntu:~/jmw_work_space/20240421$ vi count.sh
    
    # 查看编辑好的内容
    fengyehong@ubuntu:~/jmw_work_space/20240421$ cat count.sh
    zcat /home/fengyehong/jmw_work_space/20240421/CBC_SystemLog.log.zip | nkf -w8 | wc -l
    zcat /home/fengyehong/jmw_work_space/20240421/file1.txt.zip | nkf -w8 | wc -l
    zcat /home/fengyehong/jmw_work_space/20240421/file2.txt.zip | nkf -w8 | wc -l
    
    # 执行脚本,输出结果到新文件中
    fengyehong@ubuntu:~/jmw_work_space/20240421$ sh count.sh > result.txt
    
    # 查看统计的结果
    fengyehong@ubuntu:~/jmw_work_space/20240421$ cat result.txt
    18612
    7
    7
    
    # 统计全部zip文件的总行数
    fengyehong@ubuntu:~/jmw_work_space/20240421$ awk '{sum += $1} END {print "总和:", sum}' ./result.txt
    总和: 18626
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    二. 获取从第二行开始的内容

    • tail -n +2 file1.txt
    # cat命令获取文件的全部内容
    fengyehong@ubuntu:~/jmw_work_space/20240421$ cat file1.txt
    ID,方式1,姓名,组,memberID,电话号码,方式2,消耗时间,结果code
    110120,SPLREQUEST,東川雄一,AAA,memberID=1,tel=080-1111-1111,SPLEND,ExecTime=200,ResultCode=200
    123456,SPLREQUEST,西村祐二,BBB,memberID=2,tel=080-2222-2222,SPLEND,ExecTime=300,ResultCode=200
    123444,SPLREQUEST,南山裕三,CCC,memberID=3,tel=080-3333-3333,SPLEND,ExecTime=200,ResultCode=200
    
    # tail命令获取从第二行开始的内容(相当于去掉表头)
    fengyehong@ubuntu:~/jmw_work_space/20240421$ tail -n +2 file1.txt
    110120,SPLREQUEST,東川雄一,AAA,memberID=1,tel=080-1111-1111,SPLEND,ExecTime=200,ResultCode=200
    123456,SPLREQUEST,西村祐二,BBB,memberID=2,tel=080-2222-2222,SPLEND,ExecTime=300,ResultCode=200
    123444,SPLREQUEST,南山裕三,CCC,memberID=3,tel=080-3333-3333,SPLEND,ExecTime=200,ResultCode=200
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • awk 'NR > 1 {print $0}' ./file1.txt
    fengyehong@ubuntu:~/jmw_work_space/20240421$ awk 'NR > 1 {print $0}' ./file1.txt
    110120,SPLREQUEST,東川雄一,AAA,memberID=1,tel=080-1111-1111,SPLEND,ExecTime=200,ResultCode=200
    123456,SPLREQUEST,西村祐二,BBB,memberID=2,tel=080-2222-2222,SPLEND,ExecTime=300,ResultCode=200
    123444,SPLREQUEST,南山裕三,CCC,memberID=3,tel=080-3333-3333,SPLEND,ExecTime=200,ResultCode=200
    
    • 1
    • 2
    • 3
    • 4

    三. 合并两个文件为一个文件

    # 待合并的两个文件14行
    fengyehong@ubuntu:~/jmw_work_space/20240421$ wc -l file1.txt file2.txt
       7 file1.txt
       7 file2.txt
      14 total
      
    # 将file1.txt和file2.txt(去除表头)合并到newfile.csv
    fengyehong@ubuntu:~/jmw_work_space/20240421$ (cat ./file1.txt;cat ./file2.txt | tail -n +2) > newfile.csv
    
    # 合并之后的文件13行(因为第2个文件去掉了表头)
    fengyehong@ubuntu:~/jmw_work_space/20240421$ wc -l newfile.csv
    13 newfile.csv
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    四. 统计指定列唯一值的数量

    • 统计指定列唯一值: awk -F',' '{print $3}' ./newfile.csv | sort -n | uniq -c
    • 去除行开头的空白部分:sed 's/^[[:space:]]*//'
    # 查看csv文件的内容
    fengyehong@ubuntu:~/jmw_work_space/20240421$ cat newfile.csv
    ID,方式1,姓名,组,memberID,电话号码,方式2,消耗时间,结果code
    110120,SPLREQUEST,東川雄一,AAA,memberID=1,tel=080-1111-1111,SPLEND,ExecTime=200,ResultCode=200
    123456,SPLREQUEST,西村祐二,BBB,memberID=2,tel=080-2222-2222,SPLEND,ExecTime=300,ResultCode=200
    123444,SPLREQUEST,南山裕三,CCC,memberID=3,tel=080-3333-3333,SPLEND,ExecTime=200,ResultCode=200
    123434,SPLREQUEST,北岡優四,memberID=,tel=080-4444-4444,SPLEND,ExecTime=400,ResultCode=200
    345345,SPLREQUEST,田中様,EEE,memberID=5,tel=080-5555-5555,SPLEND,ExecTime=500,ResultCode=200
    674545,SPLREQUEST,,FFF,memberID=6,tel=080-6666-6666,SPLEND,ExecTime=400,ResultCode=200
    110120,SPLREQUEST,贾飞天,AAA,memberID=1,tel=080-1111-1111,SPLEND,ExecTime=200,ResultCode=200
    123456,SPLREQUEST,枫叶红,BBB,memberID=2,tel=080-2222-2222,SPLEND,ExecTime=300,ResultCode=200
    123444,SPLREQUEST,枫叶红,CCC,memberID=3,tel=080-3333-3333,SPLEND,ExecTime=200,ResultCode=200
    123434,SPLREQUEST,北岡優四,memberID=,tel=080-4444-4444,SPLEND,ExecTime=400,ResultCode=200
    345345,SPLREQUEST,田中様,EEE,memberID=5,tel=080-5555-5555,SPLEND,ExecTime=500,ResultCode=200
    674545,SPLREQUEST,,FFF,memberID=6,tel=080-6666-6666,SPLEND,ExecTime=400,ResultCode=200
    
    # 第三列是姓名列,列出每个姓名所对应的数量
    fengyehong@ubuntu:~/jmw_work_space/20240421$ awk -F',' '{print $3}' ./newfile.csv | sort -n | uniq -c
          2
          2 北岡優四
          1 南山裕三
          1 姓名
          1 東川雄一
          2 枫叶红
          2 田中様
          1 西村祐二
          1 贾飞天
          
    # 使用 uniq -c 后,数量的前面会有空格,此时可通过 sed 's/^[[:space:]]*//' 命令将其去除
    fengyehong@ubuntu:~/jmw_work_space/20240421$ awk -F',' '{print $3}' ./newfile.csv | sort -n | uniq -c | sed 's/^[[:space:]]*//'
    2
    2 北岡優四
    1 南山裕三
    1 姓名
    1 東川雄一
    2 枫叶红
    2 田中様
    1 西村祐二
    1 贾飞天
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    五. 列出文件的绝对路径

    ⏹不包含隐藏文件

    ls *.zip | sed "s:^:`pwd`/:"
    
    • 1

    六. 获取除了空白行和注释之外的部分

    • cat file3.txt | grep -v ^# | grep -v ^$

    在这里插入图片描述

  • 相关阅读:
    高亲和力丨艾美捷DetergentOUT GB-S10去垢剂研究
    高级架构师_Docker_第2章_ Docker核心原理_ 第7节IDEA集成Docker
    最新反编译小程序教程(支持分包一键反编译),反编译成功率高达99%
    Ubuntu下载离线安装包
    05.爱芳地产项目小程序全栈项目经验(已上线)
    mysql报错日志查看
    仿everything的文件搜索工具测试
    辉视IP对讲与SIP视频对讲:革新的通信技术与应用领域的开启
    鸿蒙HarmonyOS实战-Stage模型(服务卡片介绍和运行机制)
    css选择器
  • 原文地址:https://blog.csdn.net/feyehong/article/details/138040670