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

NF:表示当前记录的字段数。
$NF:表示当前记录的最后一个字段。
$(NF-1):表示当前记录的倒数第二个字段。
NR:表示当前处理的是第几行记录。
FILENAME:当前处理的文件名。
FS:字段分隔符,默认是空格或制表符。
RS:记录分隔符,默认是换行符。
OFS:输出字段的分隔符,默认为空格。
ORS:输出记录的分隔符,默认为换行符。
OFMT:数字输出格式,默认为%.6g。

函数

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

示例:转换字段为大写

1
awk -F ':' '{ print toupper($1) }' test.txt

基本用法

1
2
# 打印文件的第一列和第三列
awk '{ print $1, $3 }' test.txt

条件语句

1
2
3
4
5
6
7
8
9
# 输出奇数行的某一字段
awk -F ':' 'NR % 2 == 1 { print $1 }' test.txt

# 输出第三列以后的字段
awk -F ':' 'NR > 3 { print $1 }' test.txt

# 条件判断
awk -F ':' '{ if ($1 > "m") print $1; else print "---" }' test.txt

高级用法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 使用split()函数分割字段并打印
awk -F ',' '{ for (i=1; i<=NF; i++) print $i }' test.txt

# 使用gsub()函数全局替换文本
awk '{ gsub("foo", "bar"); print }' test.txt

# 打印包含特定字符串的行
awk '/pattern/ {print substr($0, RSTART, RLENGTH)}' test.txt

# 使用BEGIN和END块在处理前后执行代码
awk 'BEGIN { print "Start processing" } { print } END { print "End processing" }' test.txt

# 格式化打印,将数字转换为货币格式
awk '{printf "$%.2f\n", $1}' test.txt

# 使用数组存储和遍历字段值
awk '{ arr[$1] = $2 } END { for (i in arr) print i, arr[i] }' test.txt

多文件处理

1
2
# 从多个文件中读取数据
awk 'NR==1{print "File:", FILENAME; next} {print $0}' file1.txt file2.txt file3.txt