如何使用Shell awk命令?

Bash

1 前言

一个问题,一篇文章,一出故事。
笔者编写Linux Shell脚本时经常用到awk命令,于是想收集他的用法,于是整理本章。

2 最佳实践

2.1 按特定格式打印

2.1.1 按指定列打印

echo './ftp1/abc/efg.txt' | awk  -F '/'  '{print $1"/"$2"/"$3"/"$4}'

2.1.2 去掉最前列打印

cat /tmp/ftplist | awk -F'/' '{$1="";OFS="/";print}'

2.1.3 打印最后列

echo './ftp1/abc/efg.txt' | awk -F '/' '{print $NF}'

以上命令等价于以下命令,

echo './ftp1/abc/efg.txt' | awk -F '/'  '{print $(NF-0)}'

2.1.4 打印倒数第2列

echo './ftp1/abc/efg.txt' | awk -F '/'  '{print $(NF-1)}'

2.1.5 去掉最后列打印

echo './ftp1/abc/efg.txt' | awk -F'/' '{NF-=1;OFS="/";print}'

2.1.6 去掉前后列打印

echo './ftp1/abc/efg.txt' | awk -F'/' '{$1="";NF-=1;OFS="/";print}'

2.1.7 打印第n列到最后一列

echo './ftp1/abc/efg.txt' | awk -F' ' '{for (i=2;i<=NF;i++)printf("%s ", $i);print ""}'

2.2 按某种逻辑打印

2.2.1 筛选符合第n列等x然后打印

echo './ftp1/abc/efg.txt' | awk -F' ' '$2 == x {print $2}'

2.2.2 执行统计行数

echo './ftp1/abc/efg.txt' | awk -F' ' {count++} END {print count}'
没有评论

发表回复

Bash
如何实现文件夹路径转纯数字符串?

1 前言 一个问题,一篇文章,一出故事。 由于由于需要设置某目录的配额,配额要求为每个目录指定一个项 …

Bash
如何统计Linux打开文件前10进程?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境有台服务最近压力比较大,打开的文件数量不断地往 …

Bash
如何获取VSFTP昨天活跃和有效用户?

1 前言 一个问题,一篇文章,一出故事。 笔者生产环境有台老旧的FTP服务器,用户众多。笔者希望每天 …