IT_linux_shell_awk_sed_100篇--awk--例子

1
以下摘自 http://ko178.blog.51cto.com/220419/1734417

并做了修改

1. 功能是打印所有输入行
awk '{print $0} ' f ilename
2. 打印输入文件第八行
awk 'NR==8{print $0} ' f ilename
3. 用awk打印文件所有行的第一个字段
awk -F:'{print $1} ' f ilename
4. 打印输入行总数
awk 'BEGIN{num=0;} {num++;}END{print num} ' f ilename
awk 'END{print NR}' f ilename
5. 打印每行字段数
awk -F: '{print NF,$0} ' f ilename
6. 打印最后一行的最后一个字段的值
Awk -F: 'END{print $NF} ' filename
7. 打印字段数大于等于4个的行
Awk -F: ‘NF>=4{print $0} ’ f ilename
8. 打印文件所有字段的总数
Awk -F: 'BEGIN{count=0}{count=count+NF:}{print count} ' f ilename
9. 打印UID在 3040范围内的用户名
Awk -F: '$>=30&&S3<=40{print $1}' f ilename
10.倒叙排列文件的所有字段
awk -f : '{for( i=NF;i>0:i--) }{ if ( i!=1} {printf "%s: " ,$i};}else{printf ("%s\n" ,$i) ; }
#!/bin/awk -f
BEGIN{
F=": "
}
{
for( i=NF;i>0;i--)
{
if( i!=1)
{
printf ("%s: " ,$i)
}
Else
{
printf ("%s\n",$i)
}
}
}
11.打印526 行
Awk -F: 'NR>=5&&NR<=26{print} ' f ilename12.在文件顶部加上标题“Document“
Awk 'BENGIN{print“Document}{print} 'f ilename
13.隔行删除
Awk '{ if (NR%2==1) {print } }' f ilename
14.打印字段数大于5的行的总数
Awk -F: 'BEGIN{num=0; } { if(NF>=5) {num++;}} END {print num;}' f ilename
15.编写一个 awk脚本,统计/dev中各类型文件数量
#!/bin/awk -f
BEGIN{
ff=0
dd=0
bb=0
cc=0
pp=0
ss=0
ll=0
}
{
if($0 ~/^-/)
{
ff++
}
if($0 ~/^p/)
{
pp++
}
if($0 ~/^b/)
{
bb++
}
if($0 ~/^/)
{
cc++
}
if($0 ~/^d/)
{
dd++
}
if($0 ~/^l/)
{
ll++
}
if($0 ~/^s/)
{s++
}
}
END{
Print "f ile: ", f f
Print "directory: " ,dd
print" character: ",cc
print" block: " ,bb
print" link: " ,ll
print" sockt : ",ss
print" pipe: " ,pp
}
16.编写一个 awk脚本,读取IP来自一个文件,并且测试该IP地址
#!/bin/awk -f
{
if(system("ping-c 1 " $0">/dev/null)==0)
{
Print $0 YES
}
else
{
Print $0 NO
}
}
17.编写一个 awk脚本,读取文件添加用户
#!/bin/awk -f
{
If (system("useradd" $0 2>/dev/null) ==0)
{
Print "user: " $0"add"
}
else
{
Print "user"$0"error"
}
}
18.编写一个 awk脚本,功能过滤出合法IP地址
#!/bin/awk -f
BEGIN{
FS=" : "
}
{
if( 1>0&&$1<255&&$2>=0&&$2<=255$3>=0&&$3<=255$4>=0&&$4<=255{
Print $0
}
}
19.编写一个 awk脚本,功能是每行抽取第一个单词
#!/bin/awk -f
BEGIN{
FS=" [^a-Z]+"
}
{ f irst=0
f lag=0
for( i=1;i<=NF;i++)
{
If ($I !=NULL}
{
if(f lag==0)
{
f irst=I
f lag=1
}
}
}
Print $f irst
}
20.编写一个 awk脚本,功能是打印每行的第一个和最后一个单词
#!/bin/awk -f
BEGIN{
FS=" [^a-Z]+"
}
{ f irst=0
f lag=0
last=0
for( i=1;i<=NF;i++)
{
If ($I !=NULL}
{
last=i
if(f lag==0)
{
f irst=I
f lag=1
}}
}
Print $f irst " " $last
} 
Shell脚本高级编程教程,希望对你有所帮助。 Example 10-23. Using continue N in an actual task: 1 # Albert Reiner gives an example of how to use "continue N": 2 # --------------------------------------------------------- 3 4 # Suppose I have a large number of jobs that need to be run, with 5 #+ any data that is to be treated in files of a given name pattern in a 6 #+ directory. There are several machines that access this directory, and 7 #+ I want to distribute the work over these different boxen. Then I 8 #+ usually nohup something like the following on every box: 9 10 while true 11 do 12 for n in .iso.* 13 do 14 [ "$n" = ".iso.opts" ] && continue 15 beta=${n#.iso.} 16 [ -r .Iso.$beta ] && continue 17 [ -r .lock.$beta ] && sleep 10 && continue 18 lockfile -r0 .lock.$beta || continue 19 echo -n "$beta: " `date` 20 run-isotherm $beta 21 date 22 ls -alF .Iso.$beta 23 [ -r .Iso.$beta ] && rm -f .lock.$beta 24 continue 2 25 done 26 break 27 done 28 29 # The details, in particular the sleep N, are particular to my 30 #+ application, but the general pattern is: 31 32 while true 33 do 34 for job in {pattern} 35 do 36 {job already done or running} && continue 37 {mark job as running, do job, mark job as done} 38 continue 2 39 done 40 break # Or something like `sleep 600' to avoid termination. 41 done 42 43 # This way the script will stop only when there are no more jobs to do 44 #+ (including jobs that were added during runtime). Through the use 45 #+ of appropriate lockfiles it can be run on several machines 46 #+ concurrently without duplication of calculations [which run a couple 47 #+ of hours in my case, so I really want to avoid this]. Also, as search 48 #+ always starts again from the beginning, one can encode priorities in 49 #+ the file names. Of course, one could also do this without `continue 2', 50 #+ but then one would have to actually check whether or not some job 51 #+ was done (so that we should immediately look for the next job) or not 52 #+ (in which case we terminate or sleep for a long time before checking 53 #+ for a new job).
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值