常用linux文本操作命令学习系列(1)-awk

常用linux文本操作命令学习

awk

参考文档

阮一峰_awk 入门教程

介绍

对于文本操作很方便

使用

awk 动作 文件名

示例:awk '{print $0}' demo.txt

awk参数

重要性 参数 含义 示例
***** $0 代表当前行 awk '{print $0} words.txt' (文档原样输出)
***** 1、2、$3 代表第一个字段、第二个字段、第三个字段
***** -F 指定分隔符 例如有的文本使用':'分隔 awk -F ':' '{ print $1 }' demo.txt
***** , 输出多个元素,以空格分割 输出第2个和倒数第二个元素:awk '{print $2, $(NF-1)}' words.txt
***** "" 需要原样输出的字符放在双引号中

awk内置变量

重要性 变量 含义 示例
***** NF 表示当前行的字段数,因此$NF就是当前行的最后一个字段(注意对于每行都是当前行的最后一个字段,哪怕每行字段数量不一致) awk '{print $NF} words.txt'
***** NF-1 倒数第二个字段 awk '{print $(NF-1)} words.txt'
***** NR 当前处理的是第几行 awk -F ':' '{print NR ") " $1}' demo.txt
*** FILENAME 当前文件名
** FS 字段分隔符,默认是空格和制表符
RS 行分隔符,用于分割每一行,默认是换行符
* OFS 输出字段的分隔符,用于打印时分隔字段,默认为空格
ORS 输出记录的分隔符,用于打印时分隔记录,默认为换行符
* OFMT 数字输出的格式,默认为%.6g

awk函数

awk完整函数列表

以下列举常用函数及用法:

重要性 函数 含义 示例
*** toupper() 将字符转化为大写 awk '{print toupper($1)}' words.txt
*** tolower() 将字符转化为小写
**** length() 返回字符串长度
*** substr() 返回子字符串
*** sin() 正弦
cos() 余弦
sqrt() 平方根
rand() 随机数

awk条件

awk条件应写在动作前面,操作为:awk '条件 动作' 文件名

条件 含义 示例
// 匹配只输出包含特定字符的行 awk '/the/ {print $0}' words.txt
NR % 2 == 1 NR >3 对行数进行操作,例如只输出奇数行,只输出三行以后的行 输出奇数行:awk -F ':' 'NR % 2 == 1 {print $1}' demo.txt 输出三行以后的行:awk -F ':' 'NR >3 {print $1}' demo.txt
$1 == "root" 第一个字段等于指定值的行 awk -F ':' '$1 == "root" {print $1}' demo.txt `awk -F ':' '$1 == "root"

条件语句

条件 含义 示例 注意事项
if 用于复杂的条件判断 awk '{if ($1 > "t") print $1}' words.txt if条件判断属于动作范围内,要和print这样的动作写在一个{}里面
if else 用于复杂的条件判断 awk '{if ($1 > "t") print $1; else print "__"}' words.txt if else中间用;分割