首页 > 代码库 > awk grep sed

awk grep sed

awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。

last -n5|awk {print $1}‘    #last -4 也行

cat /etc/passwd |awk  -F :‘  {print $1}           #等于  cat /etc/passwd |cut -d‘:‘ -f1     显示/etc/passwd的账户             awk  -F:  {print $1}   也行

 

cat /etc/passwd |awk  -F :‘  {print $1"\t"$7}‘  #显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割

cat /etc/passwd |awk  -F :‘  BEGIN {print "name,shell"}  {print $1","$7} END {print "blue,/bin/nosh"}‘  #显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列名name,shell,在最后一行添加"blue,/bin/nosh"。   BEGIN END 注意是大写   工作流程是这样的:先执行BEGING,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0则表示所有域,$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。接着开始读入第二条记录······直到所有的记录都读完,最后执行END操作

 

 

搜索/etc/passwd有root关键字的所有行   #搜索支持正则,例如找root开头的: awk -F: ‘/^root/‘ /etc/passwd

 

#awk -F: /root/‘ /etc/passwd

 

 

 

统计某个文件夹下的文件占用的字节数

 

ls -l |awk BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size}
[end]size is  8657198

 

 

 

如果以M为单位显示:

 

ls -l |awk BEGIN {size=0;} {size=size+$5;} END{print "[end]size is ", size/1024/1024,"M"}
[end]size is  8.25889 M

 

注意,统计不包括文件夹的子目录。

 

 

 

 

 

 

 

统计某个文件夹下的文件占用的字节数,过滤4096大小的文件(一般都是文件夹):

ls -l |awk BEGIN {size=0;print "[start]size is ", size} {if($5!=4096){size=size+$5;}} END{print "[end]size is ", size/1024/1024,"M"}
[end]size is  8.22339 M

显示/etc/passwd的账户

awk -F :BEGIN {count=0;} {name[count] = $1;count++;}; END{for (i = 0; i < NR; i++) print i, name[i]}‘ /etc/passwd0 root1 daemon2 bin3 sys4 sync5 games......

 

awk grep sed