当前位置:   article > 正文

Shell工具(cut,sed,awk,sort用法)_shell脚本awk cut用法

shell脚本awk cut用法

cut

sed

awk

sort

一、cut

1、语法:

cut  [选项参数] [file]
  • 1

2、使用说明:

从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定-b、-c 或 -f 标志之一。

3.选项参数说明

选项参数功能
-b以字节(bytes) 为单位取出固定字符区间
-c以字符 (characters) 为单位取出固定字符区间
-f指定域(fields),提取第几列,与-d一起使用
-d指定分隔符,对列进行分割
-s表示不包括那些不含分隔符的行(这样有利于去掉注释和标题)

注意: 只有当操作时才可以指定输入分隔符,默认分隔符是制表符。

4、实例详解

数据准备1:cut.txt

zeng 18
li 19
熏悟空 20
印贼做父 22
lee  17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 按字节截取数据(-b)
  1. 查询每行第2个字节

    cut -b 2 cut.txt
    在这里插入图片描述

  2. 查询每行第1-3个字节

    cut -b 1-3 cut.txt

在这里插入图片描述

我的linux系统编码是UTF-8,所以一个汉字占三个字节长度

  • 按字符截取(-c)
  1. 截取第三个字符

     cut -c 3 cut.txt
    
    • 1

在这里插入图片描述

  • 按域截取
  1. 以空格为分隔符,取出每一行第一个域的数据

     cut -d " "  -f 1 cut.txt
    
    • 1

在这里插入图片描述

  1. 截取第三个冒号后面所有的数据

    数据准备2:cut1.txt

     t:x:0:0:root:/root:/bin/bash
     bin:x:1:1:bin:/bin:/sbin/nologin
     daemon:x:2:2:daemon:/sbin:/sbin/nologin
     adm:x:3:4:adm:/var/adm:/sbin/nologin
     lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     sync:x:5:0:sync:/sbin:/bin/sync
     shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
     halt:x:7:0:halt:/sbin:/sbin/halt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    代码如下:

     cut -d ":"  -f 4- cut1.txt
    
    • 1

在这里插入图片描述
以冒号为分隔符,取第三个冒号后面所有的数据,即取从第四个域(列)开始到末尾的数据。

  1. 截取出指定的多列数据

    # 截取第2和第4个域的数据
    cut -d '/' -f 2,4 cut1.txt
    
    • 1
    • 2

在这里插入图片描述

  1. 以空格为分隔符,截取第二列(不处理输出没有分隔符的行)

    数据准备:

     zeng 18
     li 19
     熏悟空 20
     印贼做父 22
     lee  17
     
     我爱北京天安门
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    代码:

     cut -d " "  -sf 1 cut.txt
    
    • 1

在这里插入图片描述

技巧总结:

1、取连续的多列时,使用 ‘-’ 横杠;比如取第5列到第8列:5-8
N-:指从第N个字段到行尾。
N-M:指从第N个字段到第M个字段。
-N:指从行首到第N个字段。
2、取不连续的多列时,使用 ‘,’ 逗号,比如取第二列,第五列,第八列:2,5,8

二、sed

1、工作模式:

sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非使用重定向存储输出。

2、使用场景:

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等

3、语法

sed [选项参数]  ‘command’  filename
  • 1

选项参数说明

选项参数功能
-e 脚本命令直接在指令列模式上进行sed的动作编辑。会将其后跟的脚本命令添加到已有的命令中,可用于同时编辑多个任务
-f 脚本命令文件/该选项会将其后文件中的脚本命令添加到已有的命令中。-f filename会将文件中的sed动作都进行执行
-i直接编辑原文件(谨慎使用)
-n只打印模式匹配的行(只输出sed特殊操作过的行)
-r支持扩展型正则表达式的语法

4、常用命令功能描述

命令功能描述
a新增,后面可接字符串 ,在当前行下面插入文本
i插入,后面可接字符串 ,在当前行上面插入文本
c替换,后面可接字符串 ,把选定的行改为新的文本
s替换,替换指定字符,搭配正则表达式
d删除,删除选择行
p打印,将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

数据准备:sed1.txt

zeng 18
li 19
熏悟空 20
印贼做父 22
lee  17

我爱北京天安门
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • a 新增
  1. 在第三行下面新增字符串’增增增’

     sed '3a 增增增' sed1.txt
    
    • 1

在这里插入图片描述

  1. 在多个行下新增数据(逗号分隔)

     sed '3,5a 增增增' sed1.txt
    
    • 1

在这里插入图片描述

  • i 插入
  1. 在第二行插入字符串’插插插’

     sed '2i 插插插' sed1.txt 
    
    • 1

在这里插入图片描述

  • c 替换行数据
  1. 用指定字符串替换多行数据

    sed '1,2c  替换' sed1.txt
    
    • 1

在这里插入图片描述

  • s 替换指定字符串 s/old str/new str/g
  1. 对每一行的首个指定字符进行替换

     sed 's/e/E/' sed1.txt
    
    • 1

在这里插入图片描述

  1. 全局替换

     sed 's/e/E/g' sed1.txt
    
    • 1

在这里插入图片描述

  • d 删除
  1. 删除指定行号数据(第三行)

    sed '3d' sed1.txt
    
    • 1

在这里插入图片描述

  1. 删除空白行数据

     sed '/^$/d' sed1.txt
    
    • 1

在这里插入图片描述

  1. 删除含有指定字符的行数据

     sed '/e/d' sed1.txt
    
    • 1

在这里插入图片描述

  • p 打印被选择数据

    sed 's/e/E/p' sed1.txt 
    
    • 1

    对被操作的数据进行打印

    在这里插入图片描述

    sed -n 's/e/E/p' sed1.txt	
    
    • 1

    仅打印被操作的数据

    在这里插入图片描述

三、awk

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

1、语法:

awk [选项参数] '{[pattern] action}' filename
pattern:awk查找的内容,匹配模式
action:找到匹配内容后执行的一系列命令
  • 1
  • 2
  • 3

选项参数说明:

选项参数说明
-F指定分隔符,不指定默认为空格
-f调用脚本
-v指定变量

2、优点

在处理庞大文件时不会出现内存溢出或是处理缓慢的问题,通常用来格式化文本信息

3、实例

1、数据按空格进行分割,取出指定字段数据,$1表示第1字段,$2表示第2个字段,依次类推。

echo 'may I help you' | awk '{print $1,$3}'
  • 1

在这里插入图片描述
注意:$0表示输出整行的数据。

echo 'may I help you' | awk '{print $0}'
  • 1

在这里插入图片描述
2、按照指定分隔符分割,取出指定列,并用逗号分隔列

awk -F ':' '{print $5 "," $6}' awk1.txt
  • 1

在这里插入图片描述
3、设置变量,并进行计算

awk -v a=10 '{ print a+1}' awk1.txt
  • 1

在这里插入图片描述

4、输出行号NR和列数NF,并在文件开头输出start,结尾输出end

awk -F ':' 'BEGIN{print "start"}{print NR " " NF " " $0} END{print "end"}' awk1.txt
  • 1

在这里插入图片描述
内置变量:

NF 浏览记录的字段个数
NR 已读的记录数

5、使用函数(统计每行元素个数)

awk '{ print length($0) " " $0}' awk1.txt 
  • 1

在这里插入图片描述
6、支持正则表达式(查询s开头的行数据)

# 查询s开头的
awk '/^s/' awk1.txt
  • 1
  • 2

在这里插入图片描述

四、sort

用于将文本文件内容加以排序

1、语法:

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件]
  • 1

参数说明:

参数说明
-b忽略每行前面开始出的空格字符。
-c检查文件是否已经按照顺序排序。
-d排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f排序时,将小写字母视为大写字母。
-i排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m将几个排序好的文件进行合并。
-M将前面3个字母依照月份的缩写进行排序。
-n依照数值的大小排序。
-u意味着是唯一的(unique),输出的结果是去完重了的。
-o<输出文件> 将排序后的结果存入指定的文件。
-r以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。

2、实例:

数据准备:

Lily 50
Balle 30
Ana 99
Conda 16

Linda 34
Tom 43
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 根据数值大小进行排序

    sort -n sort.txt
    
    • 1

    默认按照第一列排序,因为第一列不是数字,故按照首字母进行排序。依次按ASCII码值进行比较,最后将他们按升序输出。

    在这里插入图片描述

  2. 按相反顺序排序

    sort -r sort.txt
    
    • 1

    在这里插入图片描述

  3. 按照第二列降序排序

    sort -rk 2 sort.txt
    
    • 1

    在这里插入图片描述

  4. 对文档数据进行去重并写入到新的文档中

    sort -u sort.txt -o unique.txt
    
    • 1

    在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/628034
推荐阅读
相关标签
  

闽ICP备14008679号