0 awk is often used like below:
a=OFC30L40.0
awk -F [A-Z] '{print $1}'
awk use to get column ;
awk only use to regular express to match judge.
use embedded function to replace , such as : gsubstr
1 这个程序的亮点,是shell中用awk正则的条件判断
ls -ltr |while read line
do
filename=`echo $line|nawk '{print $9}'`
corename=`echo $filename| nawk '/^core/ {print}'`
if [ "$corename" != "" ]
then
echo $corename
file $corename
fi
done
2 assignment:
it different from shell.
shell is right
a=10
c=$a
awk is error
a=OFC30L40.0
echo $a |nawk '{ if (/OFC([0-9]+)L([0-9]+).0/) { b=$a;exit 10;} else { exit 11;} }'
3
ls -l |nawk '{if($3 ~ /^[0-9]*$/){print $0}}'
for x in `ls`; do name=`ls -ld $x | nawk -F" " '{print $3}'`; id $name > /dev/null 2>&1; if [ $? -ne 0 ]; then ls -ld $x; fi; done
4
awk 可以接文本or 管道
如e=`echo $c|nawk -F "." '{print $4}'`
nawk -F "." '{print $4}' filename-----------------------------------nawk 基本用法,长的就是这样
不能接字符串
nawk -F "." '{print $4}' string 不行
从理论上,字符串不属于标准输入输出吗。所以awk不能接
5 RS, NR
p=$( echo "$LoadName" | nawk -v RS="." 'END{print NR-1}' )\
LoadName=OFC33L40.0
RS表示分行。不是分割字段。NR表示行号
以"."分割OFC33L40.0变成两个record. 一个是OFC33L40一个是0.NR等于2. print 2-1 即1
-v表示变量定义,在awk中任何变量都要用它定义
solaris 用nawk不能用awk
6
awk '{while(getline line < "1.txt"){ print $0 OFS line; $0 = " "}; close("1.txt")}' 2.txt
7
ps -ef | grep center | grep -v grep | awk '{ print "kill -9 " $2 '}
8 :it is common example for two file merge lines--NR,FNR
- [root@localhost ~]# cat i
- tb|cname
- tb|objldn
- tb|date
- tb_q|cname
- tb_q|objldn
- [root@localhost ~]# awk 'BEGIN{FS=OFS="|"}NR==FNR{a[$1]++;next}{$3=$2;$2=a[$1]}1' i i
- tb|3|cname
- tb|3|objldn
- tb|3|date
- tb_q|2|cname
- tb_q|2|objldn
- [root@localhost ~]#
9
awk goal is for get column
the most usage is -F
it split string or character to get
don;t need use "|" to choose , only enum
such as : a-z and ". "
a=OFC30L40.0
echo $a | awk -F '[A-Z.]+' '{print $3}'
-------
awk -F. 'NF>1{if(NR>1)print "";printf $0;next}{printf " "$0}END{print ""}' urfile
回复 18# todayhero
111.121.121.211
153
132
223.222.132.216
123
203
333.353.333.323
139
222
结合楼主的文件内容就好理解了,
-F. 'NF>1{if(NR>1)print ""; #只在NF>1 和 NR >1 两个条件同时满足的情况下, 换行. 其它情况下不换行.
第1 行: 111.121.121.211 #条件不符, 不换行
第2 3 行: 条件都不符,不换行. 这时累计输出结果为:
111.121.121.211 153 132
第4行: 223.222.132.216 # NF>1 和 NR >1 两个条件同时满足, 换行
第5 6 行: 条件都不符,不换行. 这时累计输出结果为:
111.121.121.211 153 132
223.222.132.216 123 203
依此类推.....
========
example 2:
input :
Peer (2) advanced to state (7) at (6).
^?22 2013-03-17 20:57:41.506733 coolnjmcl080 COOLSIGproc 7771[17445] M3UA remote Peer (2) advanced to state (8) at (6)
awk -F 'COOLSIGproc' '{print RT,$2}'
good use -F to choose key