linux中如何使用awk完成更多结构化的复杂任务
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
相关文章