awk 命令的用法
awk 是常用的 Linux 文本操作命令和脚本语言。用来按行提取和处理文本内容,也可以执行简单的逻辑处理。
比如我们有一个 txt 文件:
ab.c 123 e.rt 456
oh.g 324 b.na 756
si.d 156 o.ui 452
执行命令:
$ awk '{print $1}' test.txt
ab.c
oh.g
si.d
可以看到返回结果为每一行的第一个字符串。默认以空格作为分隔符。
$1
为每行第一个字符串,$2
为每行第二个字符串,以此类推。$0
为整个文本。
可以同时输出多个内容:
$ awk '{print $1, $2}' test.txt
ab.c 123
oh.g 324
si.d 156
内部集成的参数
FS 区域分割符
awk 默认使用空格来分割字符串,也可以自己定义分割符:
$ awk 'FS = "." {print $1, $2}' test.txt
ab c 123 e
oh g 324 b
si d 156 o
这时候,ab
和 c 123 e
分别是一个整体。
还有一种写法使用 -F
表示,要写在引号外部:
$ awk -F. '{print $1, $2}' test.txt
NF 每行字符串个数
用 $NF
来表示每行最后一个串:
$ awk '{print $NF}' test.txt
456
756
452
用 NF 来判断每行字符串格个数:只输出有 4 个字符串的所在行的内容
$ awk 'NF == 4 {print $1, $2}' test.txt
ab.c 123
oh.g 324
si.d 156
NR 当前行号
NR
记录当前行的行号:
$ awk '{print NR}' test.txt
1
2
3
$ awk '{print NR, $0}' test.txt
1 ab.c 123 e.rt 456
2 oh.g 324 b.na 756
3 si.d 156 o.ui 452
OFS 定义输出串分割符
字符串输出是可以自定义分割符号:
$ awk 'OFS="/" {print $1, $2}' test.txt
ab.c/123
oh.g/324
si.d/156
BEGIN 和 END 规则
BEGIN 规则是在 awk 读取输入文本前执行的指令,END 规则是在 awk 输出完字符串后执行的指令。
$ awk 'BEGIN {print "begin process"} {print $0} END {print "end process"}' test.txt
begin process
ab.c 123 e.rt 456
oh.g 324 b.na 756
si.d 156 o.ui 452
end process
判断模块
可以使用常用的判断来过滤输出结果:
设置第4个字符串数字需要大于等于500:
$ awk '$4 >=500 {print $0}' test.txt
oh.g 324 b.na 756
设置行内必须包含字符串 ab
:
$ awk '/ab/ {print $0}' test.txt
ab.c 123 e.rt 456
设置行开始必须包含字符串 ab
:
$ awk '/^ab/ {print $0}' test.txt
ab.c 123 e.rt 456
如果必须包含的是特殊字符需要加转义符\
:
$ awk '/\./ {print $0}' test.txt
使用 if 命令判断:
awk '/\./ {if($2 != "abc") {print $1}}' test.txt
使用 xargs 调用 awk 输出内容
使用 xargs 可以将 awk 的内容逐行作为 stdin 传递给其他命令使用。
例如:
awk '{print $0}' test.txt | xargs echo
以上会将 awk 过滤输出的内容通过 xargs 命令逐行传递给 echo 作为 stdin 信息使用。
awk script 脚本
如果命令很复杂,可以建立一个脚本来单独执行。
建立文件:test.awk
#!/usr/bin/awk -f
BEGIN {
# set the input and output field separators
FS=":"
OFS=":"
# zero the accounts counter
accounts=0
}
{
# set field 2 to nothing
$2=""
# print the entire line
print $0
# count another account
accounts++
}
END {
# print the results
print accounts " accounts.\n"
}
可执行权限:
chmod +x test.awk
执行:
./test.awk /etc/passwd
windows
windows 下也可以使用 awk,下载安装 Gawk 即可。
官网:http://gnuwin32.sourceforge.net/packages/gawk.htm
下载对应安装包,安装后将 awk 可执行文件的路径加入系统 PATH 即可使用,参考:https://blog.niekun.net/archives/413.html
参考链接
https://www.howtogeek.com/562941/how-to-use-the-awk-command-on-linux/
http://linuxcommand.org/lc3_adv_awk.php
标签:无
这个好!对处理文件数据有用