Linux 小技巧1

news2024/11/16 12:06:28

目录

  • 一. 统计文件的总行数
  • 二. 获取从第二行开始的内容
  • 三. 合并两个文件为一个文件
  • 四. 统计指定列唯一值的数量
  • 五. 列出文件的绝对路径
  • 六. 获取除了空白行和注释之外的部分


一. 统计文件的总行数

⏹非压缩文件

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

⏹压缩文件

  • 使用zact命令,可在不解压的情况下直接查看压缩文件的内容
zcat ./*.csv.zip | nkf -w8 | wc -l
  • 若存在多个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

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

  • 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
  • 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

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

# 待合并的两个文件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

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

  • 统计指定列唯一值: 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 贾飞天

五. 列出文件的绝对路径

⏹不包含隐藏文件

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

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

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1630563.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

想要应聘前端工程师——学习路线指南

前端工程师学习路线 按照前端岗位需求,以优先学习工作更需要,面试更常考的内容为原则,由浅入深,层层铺垫,与时俱进,可以较容易地总结出前端学习路线图: HTML / CSS / JavaScript 基础学习 《Web 入门》 MDN 权威入门指南,HTML / CSS / JavaScript 快速上手 《CSS 世界…

面试中算法(链表)

链表相关的题 有一个单向链表,链表中有可能出现“环”,如图所示,如何用程序来判断该链表是否为有环链表呢? 对于这道题,有一个很巧妙的方法,这个方法利用了两个指针。 首先创建两个指针pi和p2(在Python里就是两个对象…

【问题分析】TaskDisplayArea被隐藏导致的黑屏以及无焦点窗口问题【Android 14】

1 问题描述 用户操作出的偶现的黑屏以及无焦点窗口问题。 直接原因是,TaskDisplayArea被添加了eLayerHidden标志位,导致所有App的窗口不可见,从而出现黑屏和无焦点窗口问题,相关log为: 这个log是MTK添加的&#xff0…

目标检测——YOLOv8算法解读

作者:Ultralytics公司 代码:https://github.com/ultralytics/ultralytics YOLO系列算法解读: YOLOv1通俗易懂版解读、SSD算法解读、YOLOv2算法解读、YOLOv3算法解读、YOLOv4算法解读、YOLOv5算法解读、YOLOR算法解读、YOLOX算法解读、YOLOv6算…

7. Django 模型与数据库

第7章 模型与数据库 Django对各种数据库提供了很好的支持, 包括PostgreSQL, MySQL, SQLite和Oracle, 而且为这些数据库提供了统一的API方法, 这些API统称为ORM框架. 通过使用Django内置的ORM框架可以实现数据库连接和读写操作. 本章以SQLite数据库为例, 分别讲述Django的模型…

统一威胁情报如何赋能SOC应对复杂威胁?

安全运营中心(SOC)是组织网络安全战略的核心组成部分,扮演着至关重要的角色。其负责实时监控整个IT基础设施,以检测、响应和预防各类网络安全威胁。网络安全威胁日益复杂且多变的数字化时代,攻击平面泛化、基础设施复杂…

10天精通Python爬虫:详细路线速成,开启兼职副业新篇章!

爬虫,即网络爬虫,是一种自动化程序,用于从互联网上抓取数据。在现代信息社会,爬虫技术广泛应用于数据分析、搜索引擎优化、竞品分析等领域。学习爬虫不仅可以提高数据处理能力,还可以为未来的职业发展打下坚实基础。 …

java基础之java容器-Collection,Map

java容器 java容器分类一. Collection1. List①. ArrayList② . LinkedList③ . Vector 2. Queue队列①. LinkedList②. PriorityQueue 3. Set集合①. HashSet②. TreeSet 二. Map1. HashMap2.TreeMap3. Hashtable java容器分类 java容器分为两大类,分别是Collecti…

修复所有 bug 并不能解决所有问题

原文:jeffpsherman - 2024.04.08 在软件领域,如同在制造业,有些问题是由于 bug 或“特殊原因”引发的,而有些则是“常见原因”,这是由于系统设计和实现的性质所导致的。修复 bug 就是移除特殊原因,消除 bu…

项目经理学习PMP对自己工作有多大帮助?

PMP是一种项目管理认证,也是最流行和含金量较高的认证之一。因此,你问它对项目管理有多大帮助,我可以说PMP可以被视为量身定制给项目管理岗人员的一个证书,你能理解它的重要性吗? 随着国家经济建设由基础设施向高端产业…

新闻 | 电子系协同智能中心与昌平区未来高教园及多所高校开展交流,共话智能无人平台建设

2024年4月8日,清华大学电子工程系在北京昌平两岸共盈科技产业园电子系地空协同智能无人平台基地成功举办“美团杯”智能无人机挑战赛,清华大学电子系党委书记沈渊、昌平区未来城管委会校城融合处处长熊玉川、清华大学团委副书记黄峰等出席。此外来自昌平…

CSS详解(一)

1、css工作中使用场景 美化网页(文字样式、背景样式、边框样式、盒子模型、定位、动画、),布局页面(flex布局、响应式布局、媒体查询) 2、CSS 规则 通常由两个主要部分组成选择器和样式声明 2.1选择器 选择器指定了…

Unity打包PC端exe,压缩打包为一个exe文件

目录 一.打包成功 1.打包输出文件 二.压缩输出目录为exe单个文件 1.添加到压缩文件 2.其他设置 1.点击“高级→自压缩选项” 2.修改解压后运行程序 3.设置模式 4.更新 三、生成.exe 一.打包成功 1.打包输出文件 1、一个后缀为 BurstDebugInformation_DoNotShip的文…

unittest断言_assert_使用python自带的断言

既可以使用: 1. self.assertEqual(ex1, ex2) #判断ex1 是否相等ex2 2. self.assertIn(ex1 ,ex2) # ex2是否包含ex1 注意:所谓的包含不能跳字符 3. self.assertTrue(ex) # 判断ex是否为True又可以使用: """目标断言扩展&…

C#实现 IDbConnection / IDbCommand 等相关通用数据接口

目录 关于数据接口 对象执行流程 范例运行环境 设计与实现 引用 GetConnection方法 GetCommand方法 GetParameter方法 小结 关于数据接口 在.net 应用中,与数据库进行连接、访问和执行经常会用到数据接口的相关对象,如下: 1、 Con…

【mysql】mysql命令使用大全,你想要的都在这里

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

《前端面试题》- React - 如何区分函数组件和类组件

问题 如何区分函数组件和类组件? 答案 可以使用instanceof 或者Component.prototype.isReactComponent。 示例 函数组件 export default function FunctionComonent() {if(FunctionComonent.prototype.isReactComponent){console.log(FunctionComonent是类组件…

前端JS必用工具【js-tool-big-box】,Number数值转换的方法调用学习

这一小节,我们针对前端工具包(npm)js-tool-big-box的使用做一些讲解,主要是针对Number数值型转换的一些方法使用。 目录 前言 1 安装和引入 2 千位逗号分割 3 判断是否大于0 4 判断是否大于0的整数 5 生成指定范围内的随机数…

Allegro画PCB时如何只删除走线的一部分

如何只删除走线的一部分 1、第一步: 2、第二步: 3、第三步,点击相应的走线段就能删除了。 说明:上面的Cline和Line只的是电线和线,您按下删除后,就可以删除这两种东西,但删除的是一整条折线.把这两个取消掉,换成Cline Segs和Ot…

计算机服务器中了helper勒索病毒怎么办,helper勒索病毒解密流程工具

在网络技术飞速发展的今天,越来越多的企业离不开网络,网络可以为企业带来更高的生产效率,提供更多的便捷服务,但网络是一把双刃剑,在为人们提供便利的同时,也为企业的数据安全带来严重威胁。近日&#xff0…