文本处理之awk

适用于 ubuntu 20.04
ubuntu 20.04 是 “西柚云” 主要使用的操作系统 西柚云官网

awk

awk 是个Linux系统自带的处理文本文件的程序,其原理是逐行处理文本内容,适合处理每行格式相同的文本文件。如:csv 格式的文件

1
2
ps -ef > xiyou.txt
awk '{print $1}' xiyou.txt

awk [参数] ‘条件 {代码}’ filename 条件可以省略,默认处理所有行。只处理符合条件的行。

参数:

  • F 指定分割符,不指定默认为空格
  • v 定义变量或修改 awk 代码中内置的变量

awk 默认以空格作为分隔符,也可通过 F 参数指定特殊的符号为分隔符。

代码中的特殊变量:

  • $0: 当前处理行的文本内容
  • $1 使用分隔符分割后的第 1 列的内容
  • $2 使用分隔符分割后的第 2 列的内容,以此类推
  • NF 使用分隔符分割后的最后 1 列的序号
  • NF-1 使用分隔符分割后的倒数第 2 列的序号
  • NR 当前的处理行的序号
  • OFS awk 中代码 print 时的分隔符,默认值为 1 个空格
  • FILENAME 文件名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 打印文件的每一行第 1 列和第 2 列
awk '{print($1, $2)}' xiyou.txt
echo $PATH | awk -F ':' '{print $NF}'

# 只处理匹配正则表达式的行,即只处理以 txb 开头的行
awk '/^txb/ {
print("txb 用户运行的进程的 pid: ", $2)
}' xiyou.txt

# 处理不匹配正则表达式的行
awk '!/^txb/ {
print("非txb 用户运行的进程的 pid: ", $2)
}' xiyou.txt

# 所有用户的进程 id
awk '(!/^txb/ || /^txb/) && !/^UID/ {
print( $1, "用户运行的进程的 pid: ", $2)
}' xiyou.txt

# 在代码中使用 if,在代码中使用双引号,awk 能够处理比较字符串
awk -v OFS='#' '{
if($1 == "root" && $2 > 1) {
print("root 用户运行的进程的 pid: ", $2)}
}' xiyou.txt

补充内容

关系运算符 含义
> 大于 m > n
< 小于 m < n
>= 大于等于 m >=n
<= 小于等于 m <=n
== 等于 m == n
!= 不等于 m != n
~ 正则匹配符号,text ~ /正则表达式/
!= 不匹配正则,text !~ /正则表达式/
逻辑运算符 含义
a || b a 条件为真,或 b 条件为真,则整个表达式的值为真
a && b a 条件为真,且 b 条件为真,则整个表达式的值为真
!a 若 a 条件为真,则整个表达式的值为假
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2022-2023 柚子糖
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信