linux三大剑客

2023-05-16

awk是一种很棒的语言,适合文本处理和报表生成。

使用方法

awk ‘{pattern + action}’ {filenames}
尽管操作可能会很复杂,但是语法总是这样,其中pattern表示AWK再数据中查找的内容,而action是再找到匹配内容时所执行的一系列命令,包括({})不需要再程序中始终出现,pattern就是要表示的正则表达式,用斜杠括起来。action可以有很多的语句,用;号隔开。

参数

-F参数:指定分隔符,可指定一个或多个
-f:从脚本文件中读取awk命令
-mf nnn and -mr nnn:对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目,-mr限制记录最大数目。
-W:详情参考https://www.runoob.com/linux/linux-comm-awk.html
BEGIN和END模块
通常来说,对于每个输入行,awk都会执行每个脚本代码块一次,然而,再许多编程情况中,可能需要再awk开始处理输入文件中的文本之前执行初始化代码。对于这种情况,awk允许您定义一个BEGIN块。
awk开始处理输入文件之前都会执行BEGIN块,因此它是初始化FS(字段分隔符)变量,打印页眉或初始化其他再程序中以后会引用的全局变量的极佳位置
awk还提供了END块,再处理输入文件中的所有行之后执行这个块,通常用于执行最终计算或者打印应该出现再输出流结尾的摘要信息。

awk运算符

awk包含了赋值运算符,逻辑运算符||、&&。正则运算符、!。关系运算符,算数运算符,
其他运算符
$:字段引用
空格:字符串链接符
?: :三目运算符
ln:数组中是否存在某键值

常用的awk内置变量

$0:当前记录
1   1~ 1 n:当前记录的第n个字段
FS:输入字段分隔符,默认是空格
RS:输入记录分隔符,默认是换行符
NF:当前记录中的字符个数,就是有多少列
NR:已经读出的记录数,就是行号,从1开始
OFS:输出字段分隔符,默认也是空格
ORS:输出的记录分隔符,默认为换行符

  1. 字段分隔符FS
    FS="\t"一个或者多个Tab分割
    NF:字段数量,比如’NF8{print $0}’
    NR:记录数量,比如’NR
    2{print $4}’
    RS:记录分隔符变量,
    OFS:设置输出结果$1, 2... 2... 2...n之间的分隔符。
    ORS:输出记录分隔符设置,就是输出结果行与行之间的分割符

awk正则

:行首定位符(root)匹配所有root开头的行
: 行 位 定 位 符 ( r o o t :行位定位符(root root)匹配所有root结尾的行
.:匹配任意单个字符
*:匹配0
?:匹配0个或者1个前导字符
[]:匹配自定字符组内的任意一个字符/1,匹配以字符a或b或c开头的行
[]:匹配不再指定字符组内任意一个字符。/[^abc],匹配不以a,b,b开头的行
():子表达式组合。/(rool)+/表达一个或者多个rool组合,当有一些字符需要组合时,使用括号括起来
|:或者的意思。/(root)|B/匹配root或者B的行
\:转移字符。/a///匹配a//
,!:匹配、不匹配的条件语句。$1~/root/匹配第一个字段包含字符root的所有记录。
x{m}:x重复了m次
x{m,}:x重复至少m次
x{m,n}:x重复至少m次,但是不超过n次

uniq命令

uniq一般和sort一起使用,用来对排序好的内容去重

命令格式

uniq [-cdu][-f<栏位>][-s<字符位置>][–help][–version][输入文件]【输出文件】
参数:
-c或者–count 在每列旁边显示该行重复出现的次数
-d或–repeated 仅显示重复出现的行
-f<栏位>或–skip-fields=<栏位> 比较时跳过前n列,从n+1开始比较
-s<字符位置>或–skip-chars=<字符位置>比较时跳过前n个字符,从n+1个字符开始比较
-u或–unique 仅显示出现一次的行
-w<字符位置>或–check-chars=<字符位置>对每行第n个字符之后的内容不作对照

  1. 默认去重
    sort -k 2,2 file_name | uniq:去掉所有重复的项
  2. 比较时跳过前n列,从n+1列开始比较(注意是列跳过)
    sort -k 2,2 filename | uniq -f 3(跳过前3列)
  3. 对每行第n个字符以后的内容不作对照,忽略n以后的字符
    sort -k 2,2 filename | uniq -w 1(第一个字符之后不作比较)
  4. 跳过前n个字符,从n+1开始比较(和3相反)
    sort -k 2,2 filename | uniq -s l
  5. 在每列旁边显示该行重复出现的次数,并仅显示出现一次的行
    sort -k 2,2 filename | uniq -c -u(仅仅显示出现一次的行)
  6. 在每列旁边显示该行重复出现的次数,并仅显示重复出现的行
    sort -k 2,2 file_name | uniq -d -c(仅仅显示重复的行以及次数)

sort命令

sort用来进行对文件中的每一行作为一个单元,相互比较进行排序(排序原则为ASCII码)
参数讲解
-u:sort -u filename:输出行去除重复行。只识别-k指定的域
-r:默认排序方式时升序,-r就是降序
-n:按照数字来及逆行排序
-o:sort默认输出到标准输出,使用重定向才能写到文件,但是写入源文件就不行了。-o就是将结果写入到一个新文件,当文件名相同时,这时候就时将新的结果写入到新文件
-k:指定的列(指定的列一般搭配着-t来进行时核定间隔符)
-t:设置间隔符。后面跟间隔符
-f:将小写字母转换为大写字母来进行比较(忽略大小写)
-c:检查文件是否已经排好序了,如果乱序,输出第一个乱序的
-C:检查文件是否已排好序,如果乱序,不输出内容,返回1
-M:会以月份排序,比如JAN小于FEB
-b:会忽略每一行前面的所有空白部分,从第一个可见字符开始比较

对-k参数的详解

-k是排序的时候对排序列表的选择。
问题1:当遇到多个排序关键字怎么办?
-k1 -k2 -k3 -k4都是可以的
sort -t ’ ’ -k2rn -k3n filename
对空格进行分割列表,第二列进行rn(倒序、数字)排序,对第三列进行n(数字)排序
-k的具体语法格式。
[FStart[.CStart]][Modifier][,[FEnd[.CEnd]][Modifier]]
这个语法格式可以被其中的逗号“,”分为两个部分,Start部分和End部分。
Start部分也由三个部分组成,其中的Modifier部分就是我们之前说的类似n和r选项部分。
CStart也是可以省略的,省略的话就表示从本域的开头部分开始。之前的例子中的-k2和-k3就是省略了CStart…(太多了不易懂,直接举例子)
对列的第几个字符开始比较
sort -t ’ ’ -k1.2 filename:对分列之后第一列第二个字符开始排序
sort -t ’ ’ -k1.2,1.2 filename:对特定的位置1.2的位置作为排序关键字


  1. abc ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

linux三大剑客 的相关文章

  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • docker容器大小远大于实际大小

    我正在尝试从中构建图像debian latest 构建后 报告的图像虚拟大小来自docker images命令为 1 917 GB 我登录查看尺寸 du sh 大小为 573 MB 我很确定这么大的尺寸通常是不可能的 这里发生了什么 如何获
  • ftrace:仅打印trace_printk()的输出

    是否可以只转储trace printk 输出于trace文件 我的意思是过滤掉函数跟踪器 或任何其他跟踪器 中的所有函数 一般来说 您可以在选项目录中关闭选项 sys kernel debug tracing options Use ls显
  • CoAP数据包的大小是多少?

    我是这项技术的新手 有人可以帮助我了解一些疑问吗 Q 1 CoAP数据包的大小是多少 我知道有 4 字节固定标头 但是包括标头 选项和负载在内的最大大小限制是多少 Q 2 有像MQTT那样的Keep Alive的概念吗 它在UDP上工作 它
  • 我不明白 execlp() 在 Linux 中如何工作

    过去两天我一直在试图理解execlp 系统调用 但我还在这里 让我直奔主题 The man pageexeclp 将系统调用声明为int execlp const char file const char arg 与描述 execl exe
  • Linux - 从第二个选项卡获取文本

    假设我们有这样的文件 一些文本11 一些文本12 一些文本13 一些文本21 一些文本22 一些文本23 文本由制表符分隔 我们知道第 1 列中的一些文本 但希望从第 2 列中获取文本 我知道我可以通过以下方式获取线路 grep somet
  • Linux:如何设置进程的时区?

    我需要设置在 Linux 机器上启动的各个进程的时区 我尝试设置TZ变量 在本地上下文中 但它不起作用 有没有一种方法可以使用与系统日期不同的系统日期从命令行运行应用程序 这可能听起来很愚蠢 但我需要一种sandbox系统日期将被更改的地方
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 确定我可以向文件句柄写入多少内容;将数据从一个 FH 复制到另一个 FH

    如何确定是否可以将给定数量的字节写入文件句柄 实际上是套接字 或者 如何 取消读取 我从其他文件句柄读取的数据 我想要类似的东西 n how much can I write w handle n read r handle buf n a
  • 快速像素绘图库

    我的应用程序以每像素的方式生成 动画 因此我需要有效地绘制它们 我尝试过不同的策略 库 但结果并不令人满意 尤其是在更高分辨率的情况下 这是我尝试过的 SDL 好的 但是慢 OpenGL 像素操作效率低下 xlib 更好 但仍然太慢 svg
  • 监控子进程的内存使用情况

    我有一个 Linux 守护进程 它分叉几个子进程并监视它们是否崩溃 根据需要重新启动 如果父进程可以监视子进程的内存使用情况 以检测内存泄漏并在超出一定大小时重新启动子进程 那就太好了 我怎样才能做到这一点 您应该能够从 proc PID
  • 捕获实时流量时如何开启纳秒精度?

    如何告诉 libpcap v1 6 2 将纳秒值存储在struct pcap pkthdr ts tv usec 而不是微秒值 捕获实时数据包时 Note This question is similar to How to enable
  • Linux 上的基准测试程序

    对于一项任务 我们需要使用不同的优化和参数来对我们的实现进行基准测试 有没有一种可行的方法可以在Linux命令行 我知道时间 上使用不同的参数对小程序进行基准测试 从而为我提供CSV或类似内容的时间数据 输出可能类似于 Implementa
  • 当用户按下打印时运行脚本,并且在脚本结束之前不开始假脱机(linux,cups)

    我需要做的是结合用户按下打印来执行 python 程序 脚本 并且在该程序退出之前不要让打印作业假脱机 原因是打印驱动程序不是开源的 我需要更改用户设置 在本例中是部门 ID 和密码 通常是每个用户 但因为这是一个信息亭 具有相同帐户的不同
  • 限制 Imagemagick 使用的空间和内存

    我在 Rails 应用程序上使用 Imagemagick 使用 rmagick 但我的服务器 Ubuntu 不是很大 当我启动转换进程时 Imagemagick 占据了我的服务器 30GB HDD 的所有位置 内存 我想限制内存和 tmp
  • 后台分叉无法正常工作[重复]

    这个问题在这里已经有答案了 我运行这个程序 在前景和背景中 int main int pid printf App Start pid d n getpid while 1 pid fork if pid 0 printf Child n
  • vagrant ssh -c 并在连接关闭后保持后台进程运行

    我正在编写一个脚本来启动和后台流浪机器内的进程 似乎每次脚本结束和 ssh 会话结束时 后台进程也会结束 这是我正在运行的命令 vagrant ssh c cd vagrant src nohup python hello py gt he
  • 为什么我的 Dockerfile CMD 不起作用?

    所以在我的 Dockerfile 的末尾我有这样的内容 WORKDIR home CMD django admin startproject whattt CMD bin bash 当我创建映像然后运行容器时 一切都按预期运行 没有错误 D
  • Linux中使用管道进行进程间通信

    我已经编写了在 linux 中写入数字以进行管道传输的代码 如下所示 但显示错误 任何人都可以帮助我解决这个问题 基本上该程序的问题陈述如下 一个程序将打开一个管道 向管道写入一个数字 其他程序将打开同一管道 读取数字并打印它们 关闭两个管
  • 如何将后台作业的输出分配给 bash 变量?

    我想在 bash 中运行后台作业并将其结果分配给一个变量 我不喜欢使用临时文件 并且希望同时运行多个类似的后台任务 root root var echo hello world root root echo var hello world

随机推荐

  • 【LeetCode】剑指 Offer 65. 不用加减乘除做加法 p310 -- Java Version

    题目链接 xff1a https leetcode cn problems bu yong jia jian cheng chu zuo jia fa lcof 1 题目介绍 xff08 65 不用加减乘除做加法 xff09 写一个函数 x
  • 【LeetCode】剑指 Offer 66. 构建乘积数组 p312 -- Java Version

    题目链接 xff1a https leetcode cn problems gou jian cheng ji shu zu lcof 1 题目介绍 xff08 66 构建乘积数组 xff09 给定一个数组 A 0 1 n 1 xff0c
  • 【LeetCode】剑指 Offer 67. 把字符串转换成整数 p318 -- Java Version

    题目链接 xff1a https leetcode cn problems ba zi fu chuan zhuan huan cheng zheng shu lcof 1 题目介绍 xff08 67 把字符串转换成整数 xff09 写一个
  • 【LeetCode】剑指 Offer 68. 二叉树中两个节点的最低公共祖先 p326 -- Java Version

    1 题目介绍 xff08 68 二叉树中两个节点的最低公共祖先 xff09 面试题68 xff1a 二叉树中两个节点的最低公共祖先 xff0c 一共分为两小题 xff1a 题目一 xff1a 二叉搜索树的最近公共祖先题目二 xff1a 二叉
  • 【华为机考】模拟题:Words、Vowel、计算字符串重新排列数

    前言 刷题之路任重而道远 xff0c 革命尚未成功 xff0c 同志仍需努力 由于刷惯了 LeetCode xff0c 虽然知道华为机考是需要自己输入输出 xff0c 也稍稍练了一下 xff0c 结果真做模拟题的时候 xff0c 一下子忘了
  • 【华为机考】专题突破 第二周:前缀和与差分 1109

    刷题顺序参考于 2023华为机考刷题指南 xff1a 八周机考速通车 前言 前缀和是指某序列的前n项和 xff0c 可以把它理解为数学上的数列的前n项和 xff0c 而差分可以看成前缀和的逆运算 合理的使用前缀和与差分 xff0c 可以将某
  • ROS学习和树莓派小车遇到问题汇总

    垃圾问题汇总记录 这里写目录标题 垃圾问题汇总记录我的小车配置中间遇到的问题汇总问题 xff1a VM虚拟机突然卡死问题 xff1a Error opening serial could not open port dev rikibase
  • ROS官网使用方式以及问题?

    Rviz中官网的使用 这里写目录标题 Rviz中官网的使用前言 xff08 希望瞄到这篇文章的大佬能注意一下 xff09 各种自带变量的官网查询方式一些普通消息类型的查询 xff1a Rviz等工具中的变量查询 xff1a 前言 xff08
  • automake自动编译工具

    automake自动编译生成makefile文件 xff0c 使用automake xff0c 程序开发人员只需要写简单的宏文件 xff0c 生成configure xff0c 再生成Makefile in xff0c 最终生成一个惯例的m
  • ROS中TF广播和监听个人理解及消息查找

    ROS学习古月居TF使用总结 目录 ROS学习古月居TF使用总结大佬链接总代码目录The Code of TFboardcastThe Code of TFlistenerThe Code of launch 广播和监听者的使用总结广播的创
  • Latex自动化学报模板学习和问题解决总结

    根据自动化学报模板的自己摸索 目录 根据自动化学报模板的自己摸索1 前言2 模板内部文件简介3 生成自己的模板4 内部代码理解关于aas cls和aas cfg文件整个模板固定结构 5 编译时有用的模板双栏显示用的小表格插入小图片 6 遇到
  • SLAM算法总结1

    目录 前言旋转矩阵 xff0c 旋转向量 xff0c 四元数李群李代数BCH公式非线性最小二乘一阶和二阶梯度法一阶梯度法二阶梯度法 xff08 牛顿法 xff09 高斯牛顿法代码实现手写 xff08 片段 xff09 用Ceres实现 xf
  • ROS下使用串口发送数据

    ROS下使用串口发送数据 span class token macro property span class token directive keyword include span span class token string lt
  • 新手如何使用postman(新手使用,简单明了)

    如何使用postman 一 了解postman 1 什么是postman xff1f 软件测试用来做接口测试的工具 2 如何下载postman https www getpostman com xff08 官方下载 xff09 链接 xff
  • 字符串的截取、分割,截取指定字符前面(后面)所有字符

    关于字符串截取问题 xff0c 从网上搜到总结一下 xff1a 已知一个字符串 xff0c 截取第一个指定字符后面所有字符 首先得知道indexof 34 34 的用法 xff0c 例如String i 61 abcdefg xff0c 那
  • [资料分享] 好赢60A无刷电调设置说明书【详细】

    完全针对车模而设计的全新程序算法 xff0c 具有优异的启动效果 加速性能 刹车性能及线性度 xff1b 支持所有无感 xff08 即无霍尔传感器 xff09 无刷电机 xff1b 高品质用料 xff0c 具有强大的耐电流能力 xff1b
  • 单片机学习笔记 —— 串口通信原理

    一 串口通信电路 电路图 xff1a 说明 xff1a 当RXD TXD为低电平时 xff0c 对应的led灯会亮起 二 串口通信控制寄存器 下图为80C51串行口的结构 xff1a SCON serial Control Register
  • 四种方法计算字符串的长度

    在这里我提供四种方法计算字符串的长度 1 使用递归函数 2 数数 xff0c 从第一个字符开始数数 xff0c 没遇到一个字符 xff0c 长度加一 xff0c 直到遇到 34 0 34 停止数数 3 使用strlen函数 xff0c 使用
  • 汉诺塔问题—C语言实现

    一 题目描述 相传在古印度圣庙中 xff0c 有一种被称为汉诺塔 Hanoi 的游戏 该游戏是在一块铜板装置上 xff0c 有三根杆 编号A B C xff0c 在A杆自下而上 由大到小按顺序放置64个金盘 如下图 游戏的目标 把A杆上的金
  • linux三大剑客

    awk是一种很棒的语言 xff0c 适合文本处理和报表生成 使用方法 awk pattern 43 action filenames 尽管操作可能会很复杂 xff0c 但是语法总是这样 xff0c 其中pattern表示AWK再数据中查找的