字符处理--awk一些使用场景
基础的语法就不累赘了
剔除某列,如将2.txt 除了第五列 之外的列都打印出来
[root@server-102 /test]# awk -F ":" '{$5="";print $0}' 2.txt
------------------------------------------------------------------------------------
打印倒数第n列 (也就是NF减去(n-1)的列)
例如打印倒数第3列
awk -F '|' '{print $(NF-2)}' test.txt
-------------------------------------------------------------------------------------
取出 passwd 文件中id 小于等于 5 的 用户名字 和 id号
awk -F ":" '$3<5 {print $1,$3}' /etc/passwd
--------------------------------------------------------------------------------------
找出 /etc 一级目录下,大于 1024B的普通文件
方法1: ls -l /etc | awk -F " " '$1 ~ /^-/ && $5>1024{print $0}'
#解释:列出所有文件后,用awk来找第1列是~开头的(筛选普通文件),并且第5列大于1024的(筛选大小),打印出这一行
方法2:find /etc -maxdepth 1 -size +1024c -type f
#解释:find命令筛选,深度为1,大小大于1024B,类型是普通文件 f 的
---------------------------------------------------------------------------------------
取出 nu.txt 文件的 第4 --- 8 行,使用awk 方法
awk -F "" 'NR>3&&NR<9{print $0}' nu.txt
---------------------------------------------------------------------------------------
计算 /etc 一级目录下,所有普通文件的 大小总和,并计算平均每个文件的体积。 (用NR表示处理的文件数合理吗?)
ls -l /etc | awk -F " " 'BEGIN{a=0;l=1} $1 ~ /^-/{a=$5+a;l++} END{g=a/l/1024;a=a/1024/1024;print "总共" a"M\n" "平均"g"K"}'
不合理,行号不一定就是文件数目
---------------------------------------------------------------------------------------
如何 输出一个8 位的随机字符串? (不能是纯数字)
date +%N | md5sum | awk -F "" '{print $1$2$3$4$5$6$7$8}'
#解释:使用date生成一个随机数,然后使用md5加密一次(就可以是随机的数字加字母了),再打印出前8个(你想取其他的也行)
---------------------------------------------------------------------------------------
有文件 nu.txt , 请找出文件中 大于 30 的数字
[root@server-97 /test]# cat nu.txt
14:12:1:33:1:9:20
34:2:109:13:10:92:27
16:82:15:38:101:11:22
[root@localhost test]# awk -F ':' '{for(i=1;i<NF;i++){if($i>30){print $i}}}' nu.txt
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律