常用linux文本操作命令学习
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函数
以下列举常用函数及用法:
重要性 | 函数 | 含义 | 示例 |
---|---|---|---|
*** | 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中间用; 分割 |