基础的语法就不累赘了
剔除某列,如将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