awk 使用

awk 是一个文本处理工具,主要用在文本“列处理”

  • 使用说明
1
awk + 选项(可不带) +'命令' + 处理文件或内容

选项参数:

可输入awk -W help查看

常用

1
2
3
4
5
6
7
8
-F fs or --field-separator fs
指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F: 则以“:” 分割。

-v var=value or --asign var=value
赋值一个用户定义变量。

-f scripfile or --file scriptfile
从脚本文件中读取awk命令。

变量名关键词

表示该行多少个字段
1
2
3
4
5
6
7
8
9
10
11
12
13
$NF = 该行最后一个字段
$(NF-1) = 该行倒数第二个字段

NR: 表示当前处理的行数

print 打印后面字段

FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分割每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出,默认为%.6g

函数

toupper():字符转为大写。
tolower():字符转为小写。
length():返回字符串长度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():随机数。

例如:

1
2
3

awk -F ':' '{ print toupper($1) }' test.txt
输出 第一列 并把结果转换成大写

条件语句

输出奇数列

1
$ awk -F ':' 'NR % 2 == 1 {print $1}' test.txt

输出第三列之后的列

1
$ awk -F ':' 'NR >3 {print $1}' test.txt

条件语句

1
2
3
4
5
# 输出第一个字段的第一个字符大于m的行
awk -F ':' '{if ($1 > "m") print $1}' test.txt

# 输出第一个字符大于m的行,否则输出---
$ awk -F ':' '{if ($1 > "m") print $1; else print "---"}' test.txt

基本用法

打印test文件中 第1、3列

1
2
3
# 以空格或TAB分割
awk '{print $1,$3}' test.txt