linux中如何使用awk完成更多结构化的复杂任务

2023-04-12 01:13:00 更多 结构化 如何使用

Linux下使用awk完成更多结构化的复杂任务

Awk是一种强大的文本处理工具,可以用来完成很多复杂的文本处理任务。它主要由三部分组成:命令、模式和动作。命令是指令集,模式是一个或多个模式的集合,动作是要执行的操作。

Awk的语法格式如下:

awk [options] 'pattern {action}' inputfile

awk [options] -f scriptfile inputfile

选项:

-F fs 设置字段分隔符,默认为空格

-v var=value 设置变量

-f scriptfile 从脚本文件中读取命令

常用命令:

BEGIN{...} 在读取输入文件之前执行

END{...} 在读取输入文件之后执行

pattern{...} 当模式匹配时执行

模式:

模式可以是单个模式,也可以是多个模式的组合。

单个模式:

expr 模式匹配表达式为真时执行

/regular expression/ 模式匹配正则表达式时执行

BEGIN 模式匹配BEGIN关键字时执行

END 模式匹配END关键字时执行

多个模式:

pattern1,pattern2 模式1和模式2都匹配时执行

pattern1 pattern2 模式1匹配时,模式2也匹配时执行

动作:

动作可以是单个动作,也可以是多个动作的组合。

单个动作:

print 输出

print $0 输出当前行

print $1,$2,... 输出当前行的某些字段

printf 格式化输出

next 跳过当前行,开始处理下一行

exit 退出

多个动作:

action1;action2 动作1和动作2都执行

action1 action2 动作1执行完后执行动作2

Awk内置变量:

NR 当前行号

NF 当前行的字段数

FNR 当前行号,与NR不同的是,FNR是输入文件的行号

FS 字段分隔符

OFS 输出字段分隔符

ORS 输出行分隔符

FILENAME 当前输入文件名

例子:

假设有一个文件,内容如下:

1.txt

a b c

d e f

g h i

要求输出结果为:

a b c

d e f

g h i

则可以使用以下命令完成:

awk '{print}' 1.txt

输出结果为:

a b c

d e f

g h i

要求输出结果为:

a b c d e f g h i

则可以使用以下命令完成:

awk '{for(i=1;i<=NF;i++) printf $i" "; printf "\n"}' 1.txt

输出结果为:

a b c d e f g h i

要求输出结果为:

1 a

2 b

3 c

4 d

5 e

6 f

7 g

8 h

9 i

则可以使用以下命令完成:

awk '{for(i=1;i<=NF;i++) printf i" "$i"\n"}' 1.txt

输出结果为:

1 a

2 b

3 c

4 d

5 e

6 f

7 g

8 h

9 i

要求输出结果为:

a b c

d e f

g h i

则可以使用以下命令完成:

awk 'NR%3==1{print}' 1.txt

输出结果为:

a b c

d e f

g h i

相关文章