`
wx1568908808
  • 浏览: 31428 次
文章分类
社区版块
存档分类
最新评论

linux高级文件数据操作

 
阅读更多

cat :显示切割数据

-f:选择显示切割列;

-s:比现实没有分割的行

-d:自定义分隔符

cut -d ‘  ’-f 1,3  a.txt : 以空格为分隔符显示第一列和第三列;这种情况不能分隔的行也会显示出来,如果不需要可以加一个-s,如下所示:

cut  -d ' ' -s -f 1,3  a.txt

sort :文件数据排序

-n:按数值排序

-r:降序;

-t:自定义分隔符;

-k : 选择拍序列;

-f :忽略大小写;

- u:合并相同行;

 sort -t ‘  ’ -k2 -nr  sort.txt  :sort.txt中 以空格为分隔符的第二列按数值降序排序,如果没指定按数值排序则默认是按ascii码排序

wc统计数据 :

wc -l sort.txt  统计sort.txt文件行数,也可用如下命令:

cat sort.txt | wc -l  先读文件但不显示,再通过管道命令 |  拼接一个统计命令 wc -l;

ll  /etc  | wc -l   统计etc目录下有多少文件;

sed行编辑器:

-d:删除符合条件的行;

-p:显示符合条件的行;

-a\string:在符合条件的行下面添加一行,内容为string;

- \n:用于换行;

-i\string :在符合条件的行上面添加一行,内容为string;

-r file :将指定文件内容添加至符合条件行处;

-w file:将制定范围的行另存到指定文件;

-s/pattern/string/修饰符 查找并替换,默认之替换第一次匹配到的地方;

     g:行内全局替换

     i:忽略大小写

     s///,  s###,s@@@查找并替换

sed -i  1a\hello word  a.txt  在a.txt中第一行后添加新行,内容为hello word(-i直接修改原文件,不添加不能生效)

sed  2d  a.txt  删除第二行

sed  /hello/d  a.txt  删除包含hello的行;

sed  /[0-9]/d  a.txt  删除包含数字0-9的行

sed  -n  /[0-9]/p a.txt  显示包含数字0-9的行(-n静默模式)  也可以用这个  grep “[0-9]”a.txt;

sed  s/aa/bb aa/ a.txt  查找aa 并将其替换成 bb  aa,亦可用于在某个字符串前添加bb

awk强大的文本分析工具(逐行读入,按空格,制表符分隔将每行切片,再对切开部分分析处理,生成报告):

awk -F':'‘{print $1}’ passwd  打印passwd中以:分隔的第一列数据  等价于cut -d‘:’-f1 a.txt命令;

awk -F‘:’'{print $1,$7}' passwd 打印第一列和第七列

awk  -F':'  'BEGIN{print "name\tshell"}  {print $1 "\t" $7}   END{print "end==========="} '  passwd

解析:BEGIN{print "name\tshell"} 此函数体 表示 首行打印name  shell,\t表示以制表符分隔;

          {print $1 "\t" $7} 表示 打印 第1列 制表符分隔  第7列;

          END{print "end===="} 表示 在最后一行打印 end======;

awk '/root/{ print $0}' passwd  表示查找passwd中出现root的行,$0代表打印出整行数据

awk -F':'  '{print NR+"\t"NF+"\t"$0}'  passwd   打印行号(NR)、列数(NF)、整行信息

a0adf8efee8d1f9c1b94920c014772c67f5.jpg

awk  '{ split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}} END{for(i in name){print i"\t"name[i]^C} }' passwd 可实现如下结果:

     6c295d683f0e8fc26bbe1e938649f538837.jpg    

{ split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}} 函数体中首先切割第三列日期列,如果月份为01,则将数据放入map结构中,key为$1,值name[$1]为$5,name[$1]+=$5这一句比java语法要简单,取key为$1对应的value再加上$5,此时如果集合里没有该姓名的数据则会新增一条,有的话则会在原基础上相加(注:awk是将数据逐行读入处理的!$1表示这行的第$1列的值,$5同理)

END{for(i in name){print i"\t"name[i]^C} } 这一步是遍历循环上一步得到的map,打印名字和工资;如果我们想将0表示为经理m,1表示为员工w,如下图所示,该怎么做呢?

47ca5d5d9c7f4f46114975f3aae85d3f925.jpg

awk  '  { split($3,date,"-");if(date[2]=="01"){name[$1]+=$5}}    {if($2="0"){roles[$1]='M'}else{role[$1]="W"}}    END{for(i in name){print i"\t"name[i]"\t"roles[i]} }  ' passwd

我们可以再加一个函数体  {if($2="0"){roles[$1]='M'}else{role[$1]="W"}} ,将姓名-职位键值对放入roles中,遍历输出即可,注意for循环中的i表示key即姓名,这样roles[i]自然就表示该名字对应的职位了! 不得不感叹awk真的是太强大了!简直就是一门编程语言啊

 

 

转载于:https://my.oschina.net/u/3734816/blog/3062609

分享到:
评论

相关推荐

    linux文件操作 linux操作系统 文件操作 常用命令

    在Linux操作系统中,文件操作是日常任务的核心部分。文件操作主要通过系统调用和应用程序编程接口(API)来实现,这些接口提供了与操作系统内核交互的途径。在Linux中,系统调用是一组特殊的接口,允许用户程序请求...

    Linux文件IO操作

    ### Linux文件IO操作详解 #### 基本概念 Linux 文件 I/O 操作是学习 Linux 应用开发的基础,尤其对于初学者来说至关重要。本文旨在详细介绍 Linux 下的文件 I/O 操作及其相关概念。 #### 文件 在 Linux 系统中,...

    Linux高级编程 Linux高级编程

    在深入探讨Linux高级编程之前,我们首先需要理解Linux操作系统的基础。Linux是一种自由和开放源代码的类UNIX操作系统,它的内核由林纳斯·托瓦兹(Linus Torvalds)于1991年创建。Linux系统广泛应用于服务器、超级...

    linux Unix系统的文件操作

    - **高级文件操作**: - 如 `opendir` 用于打开目录。 - 更多高级操作可以通过 POSIX 库函数实现。 综上所述,Linux Unix系统的文件操作涵盖了从文件的打开、读写到关闭等多个方面,通过标准C库提供了丰富的API...

    Linux高级程序设计中文第三版.pdf

    《Linux高级程序设计》中文第三版是一本深受程序员和系统管理员喜爱的经典教程,它深入浅出地介绍了在Linux操作系统环境下进行高效程序开发的各种技术和实践。这本书涵盖了从基本的编程概念到高级的系统调用,为读者...

    电子科技大学linux环境编程作业2——李林——编写带缓存的文件操作类

    编写带缓存的文件操作类 从执行体程序库中的CLLogger类可知...调用该类的写操作接口时,数据要首先写到缓存,然后再根据策略写到文件中。 调用该类的读操作接口时,该类能根据策略缓存读出的数据 读写缓存要保持一致性

    Linux环境高级编程实验2

    从执行体程序库中的 CLLogger 类可知,通过缓存要写入文件...调用该类的写操作接口时,数据要首先写到缓存,然后再根据策略写到文件 中。 调用该类的读操作接口时,该类能根据策略缓存读出的数据 读写缓存要保持一致性

    linux下的文件过滤驱动

    在Linux操作系统中,文件过滤驱动是一种特殊的内核模块,它允许对文件系统操作进行拦截、修改或监控。这种驱动程序通常被用在安全软件、审计系统或者需要对文件访问进行特殊控制的应用中。本文将详细讲解Linux文件...

    Linux操作系统实训

    本实训旨在让学生通过设计和实现一个简单的文件系统,来深入了解 Linux 操作系统下的文件管理机制和各种文件操作命令的实质内容和执行过程。下面是本实训中涉及到的知识点: 一、文件系统概述 * 文件系统的定义和...

    linux C++ 文本文件创建写入以及读取

    在Linux环境下,C++编程语言提供了丰富的文件操作接口,使得我们能够方便地对文本文件进行创建、写入和读取。下面将详细讲解这个过程。 首先,为了在C++中打开或创建一个文本文件,我们需要使用`fstream`库。在程序...

    linux_code.rar_linux 高级编程_linux文件编程_linux网络编程IO_linux高级

    通过分析并实践压缩包中的源代码,你可以深化对Linux高级编程的理解,提高解决实际问题的能力。这是一次难得的学习机会,不仅能增进理论知识,还能提升实战技能。记得要逐行阅读代码,理解每个函数的作用,以及它们...

    中程—linux高级编程.rar

    2. **系统调用**:Linux系统调用是用户空间与内核空间交互的主要方式,学习如何使用系统调用来实现文件操作、进程控制、网络通信等功能,是Linux高级编程的基础。 3. **进程和线程管理**:理解进程和线程的概念,...

    linux 系统文件分区文件查看。

    - **ext4**:目前最常用的Linux文件系统,支持大文件和大分区,具有更快的性能和更高级的日志功能。 - **XFS**:面向大型文件系统,适合大数据和服务器环境。 - **Btrfs**:一种新型的、开源的文件系统,提供...

    Linux文件系统概念解释和Linux文件系统精通指南

    Linux文件系统是Linux操作系统的核心组成部分,它负责组织和管理存储设备上的数据,为用户提供有序、高效的数据访问方式。本文将深入解析Linux文件系统的概念,并提供一份精通Linux文件系统的指南。 一、Linux文件...

    Linux 浏览文件的客户端工具

    Linux系统作为一个强大的开源操作系统,其文件管理在日常工作中扮演着重要角色。虽然命令行界面提供了高效的操作方式,但对新手来说可能较为复杂。在这种情况下,Linux文件浏览客户端工具就显得尤为实用,例如Winscp...

    Linux高级技巧集.rar

    "Linux高级技巧集"这个压缩包文件显然是为那些寻求提升Linux技能的用户准备的,它包含了丰富的高级操作和管理技巧。下面,我们将深入探讨其中可能涵盖的一些关键知识点。 1. **命令行效率提升**:Linux的核心是其...

Global site tag (gtag.js) - Google Analytics