zoukankan      html  css  js  c++  java
  • linux cut sort wc sed>vi awk (文本处理)

    cut: 显示切割的行数据

      -f: 选择显示的列 (1: 显示第一列; 1,3: 显示第一列、第三列; 1-3: 显示第一列到第三列) 

      -s: 不显示没有分隔符的行

      -d: 自定义分隔符(' '空格 ‘d’ d字符进行分割)

    sort: 排序文件的行(字典排序(默认),数值排序)

      -n: 按数值排序

      -r: 倒序

      -t: 自定义分隔符

      -k: 选择排序行

      -u: 合并相同行

      -f: 忽略大小写

    sed: 行编辑器(和vi命令有些类似,不需要打开文件进行编辑文本)

      sed[options]'AddressCommnad'file ...,

      -n: 静默模式,不再显示模式空间中的内容(不加此命令,会把文件原本的内容+超找的内容 显示出来,原文件没有修改)

        sed -n "2p" sort.txt 只显示sort.txt 文件第二行的内容

        sed "3d" sort.txt sort.txt 删除第三行的内容全部显示

      -i: 直接修改原文件 

      -e: SCRIPT 可以执行多个脚本

      -f: /PATH/TO/SED_SCRIPT

      -r: 使用正则表达式

    sed: 行编辑器Command

      d: 删除符合条件的行;

      p: 显示符合条件的行

      a: string 在指定的行后面追加新行,内容为string

         可以用于换行

      i: string 在制定的行前面追加新行,内容为sring

        sed -i "/apple/ahahah" sort.txt 查找到apple 并在行添加字符串hahah

        sed -i "/^ha/d" sort.txt: 删除以ha开头的行

      r FILE: 将制定文件的内容添加至符合条件的行处

      w FILE: 将地址指定的范围内的行另存为制定的文件中

      s/pattern/string/修饰符; 查找并替换,默认只替换每行中第一次被模式匹配到的字符串

        g: 行内全局替换

        i: 忽略字符大小写

        sed -i "s/(id:)[0-5](:initdefault:)/152/" inittab 查找id:[0-6]:initdefault: 替换为需要的数据 

        sed "s/(IPADDR=([0-9]?[0-9]?[0-9].){3}).*/155/" ifcfg-eth0: 替换ip地址最后一位数字

     awk : 一个强大的文本分析工具,awk是把文件逐行的读入,(空格,制表符)为默认分隔符将每行切片,切开的部分再进行各种分析处理

    文件:/etc/password

    1、将每行的第一个用户信息打印出来

    awk -F ':' '{print $1}' passwd

    说明:-F 切割方式

        '' 单引号 强引用 不会被bash扩展  如果用双引号 $会被bash引用为获取标量

        '{}' 匿名内部类

           $1:表示第一行 $2:第二行 $0: 正行

    2、将表头(第一列)和shell壳(第七列) 表头加 name 和 shell 进行输出打印,结尾输出 hello和world

      awk -F':' 'BEGIN {print "name shell"} {print $1 " " $7} END{print "hello world"}'  passwd

    说明:BEGIN 只会执行一次方法 在执行匿名内部类之前执行

      END 只会执行一次方法,在匿名内部类执行完之后执行

      awk可以执行多个匿名函数:awk -F':' 'BEGIN {print "name shell"} {print $1 " " $7} {print $0} END{print "hello world" }' passwd

    3、查询行中带有root的单词并打印

      awk '/root/ {print $0}' passwd

    4、显示passwd中的行数、列数及正行内容

      awk -F':' '{print NR" "NF" "$0 }' passwd

    文件:awk.txt  0 manager 1 work

    张三	0	2018-12-12	car	3000
    李四	1	2018-01-12	car	1000
    王五	0	2018-01-12	car	2000
    赵六	1	2018-01-12	car	500
    李四	1	2018-01-12	car	4000
    赵六	1	2018-01-12	car	50000
    

    1、统计每个人1月份的工资 (默认按照制表符、空格分割数据,所以不需要加-F)

      awk '{split($3,data,"-"); if(data[2]=="01"){name[$1]+=$5} } END{for (i in name){print i " " name[i]} }' awk.txt

    2、统计每个人1月份的工资 和角色(默认按照制表符、空格分割数据,所以不需要加-F)

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

    3、使用*.awk 执行awk中的命令

    {
    	split($3, data, "-");
    	if (data[2] == "01") {
    		name[$1] += $5;
    		if ($2 == "0") {
    			role[$1] = "M";
    		} else {
    			role[$1] = "M";
    		}
    	}
    }
    END{
    	for (i in name) {
    		print i "	" name[i] "	" role[i];
    	}
    }

    awk -f awk.awk awk.txt

    可以得到同样的结果 -f 执行awk中的命令

  • 相关阅读:
    c++之输出文件和输入文件的处理
    C++之输入输出流
    c++之虚析构函数
    c++之虚函数和基类指针
    接口自动化测试框架Karate入门
    uiautomator+cucumber实现移动app自动化测试
    calabash-android Win10 入门笔记
    Page Object 模式编写UiAutomator脚本
    ruby脚本打印日志到rspec的报告文件中
    Ruby跳出多层循环 catch...throw
  • 原文地址:https://www.cnblogs.com/abel-he/p/9176848.html
Copyright © 2011-2022 走看看