字符处理--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

 

上一篇:Vulnhub靶机:AI-Web-1.0


下一篇:虚拟机启动时报’A start job is running for /etc/rc.local .. Compatibility错误。