awk
这个命令用得比较少,但是某些情况下回很有用。
让我们先创建一个测试文件 awk_test.txt1
2
3
4yang,chongqing,2019,01,01,100
kunk,wuzhou,2020,02,02,100
larry,beijing,2015,03,03,200
zinba,beijing,2018,04,04,300
基本参数
基本上只使用了-F
这个参数,用于指定分隔符。
1 | awk -F "," '{print $1,$2,$3,$4,$5}' awk_test.txt |
基本用法
打印部分或者全部信息
1 | awk -F "," '{print $1,$2,$3,$4,$5}' awk_test.txt |
还有几个 tips:
$0
表示引用一行的全部内容-F
可以使用-F "[,.]"
来指定多个分隔符
过滤
找到第一列是 kunk 的记录1
2awk -F, '$1 == "kunk"' awk_test.txt
kunk,wuzhou,2020,02,02,100
找到第二列是 beijing 而且 第三列大于 2017 的记录,并输出前两行1
2awk -F, '$2 == "beijing" && $3 > 2017 {print $1,$2}' awk_test.txt
zinba beijing
利用正则表达式找出第一列带有 a 这个字母的记录,并输出前两行(使用~
实现)1
2
3
4awk -F, '$1~/a/ {print $1,$2}' awk_test.txt
yang chongqing
larry beijing
zinba beijing
内建变量
1 | awk -F"," 'BEGIN{printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n","FILENAME","ARGC","FNR","FS","NF","NR","OFS","ORS","RS";printf "---------------------------------------------\n"} {printf "%4s %4s %4s %4s %4s %4s %4s %4s %4s\n",FILENAME,ARGC,FNR,FS,NF,NR,OFS,ORS,RS}' awk_test.txt |
为方便处理而出现,可以视为是 awk
定义的一些变量,看需求来使用。
awk 脚本
标准格式如下:
- BEGIN :处理文件前执行前的语句
- PROCESS:对每一行数据要做的处理
- END:文件处理完之后执行的语句
举个简单的例子:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18!/bin/awk -f
运行前
BEGIN{
FS = ","
printf "NAME CITY YEAR MONTH DAY\n"
printf "---------------------------------------------\n"
}
{
printf "%-6s %-6s %-6d %-6d %-6d\n",$1,$2,$3,$4,$5
}
END{
printf "---------------------------------------------\n"
}
其结果如下:1
2
3
4
5
6
7NAME CITY YEAR MONTH DAY
---------------------------------------------
yang chongqing 2019 1 1
kunk wuzhou 2020 2 2
larry beijing 2015 3 3
zinba beijing 2018 4 4
---------------------------------------------
当然这只是最简单的用法,现在权当了解,后面有需要的时候再深入学习。