awk 对文本每行处理
最后更新于:2022-04-02 03:48:18
[TOC]
## 概述
对文件中的每一行 awk 处理
如: 以空格为分界线,处理每一行,获取开头
```
> ll
total 4
drwxr-xr-x. 3 root root 32 Sep 4 13:40 cache
drwxr-xr-x. 13 root root 4096 Sep 19 15:57 github.com
// 注意必须使用单引号
> ll | awk '{print $1}'
total
drwxr-xr-x.
drwxr-xr-x.
```
## 命令
```
-F 指定间隔符默认为空格 , awk -F'.' '{print $3}' 以点做分割
```
### $符
$0变量是指整条记录。$1表示当前行的第一个域,$2表示当前行的第二个域,......以此类推。
### print和printf
print
```
> ll | awk '{print "dir:",$1}'
dir: total
dir: drwxr-xr-x.
dir: drwxr-xr-x.
dir: drwxr-xr-x.
dir: drwxr-xr-x.
dir: drwxr-xr-x.
```
printf
```
> ll | awk '{printf "dir:%s\n",$1}'
dir:total
dir:drwxr-xr-x.
dir:drwxr-xr-x.
dir:drwxr-xr-x.
dir:drwxr-xr-x.
dir:drwxr-xr-x.
```
### awk内置变量
```
ARGC 命令行参数个数
ARGV 命令行参数排列
ENVIRON 支持队列中系统环境变量的使用
FILENAME awk浏览的文件名
FNR 浏览文件的记录数
FS 设置输入域分隔符,等价于命令行 -F选项
NF 浏览记录的域的个数
NR 已读的记录数
OFS 输出域分隔符
ORS 输出记录分隔符
RS 控制记录分隔符
```
实例
```
> ll | awk '{print NR,$1}'
1 total
2 drwxr-xr-x.
3 drwxr-xr-x.
4 drwxr-xr-x.
5 drwxr-xr-x.
6 drwxr-xr-x.
```
### awk编程
#### 变量和赋值
#### 条件语句
#### 循环语句
#### 数组
## 其他
### 可同时 print 多次
```
> ll | awk '{print $1} {print $1}'
total
total
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
drwxr-xr-x.
```
';