awk简单的整理,网上的太混乱了,其实有些完全没必要啊……
awk处理数据,产生格式化报表,在使用的时候往往和excel输出的csv格式的文件处理有关系
cat a.txt |awk '{print $2}'
|more (如果a.txt是形如下图的格式) q离开
a b ……
c d ……
将含有字符串“ingping”的行显示出来
awk '/ingping/' a.txt (或者也可以先cat
a.txt|再awk)
显示每一行的第一个和第二个字段(并不是要求每一行都有固定多的分割,也不要求分割的东西符号,空格,tab)
awk '{print $1,$2}'
test1.txt|more
将含有“ingping“的关键词的数据行的第一个字段显示出来
awk '/ingping/{print $1}' a.txt
|more
制定分割字符-F {FS=“:”}
-F :-F , 随便加在awk后面就行
制定输出字符分隔符
BEGIN OFS
awk -F , 'BEGIN{OFS="+++"}{print
$1,$2}' test1.txt
awk 'BEGIN {FS=":"} $3 < 10 {print
$1 "\t " $3}' test1.txt
替换顺序输出到一个新的文件就实现了格式化的整列顺序变化
awk -F , 'BEGIN{OFS="+++"}{print
$2,$1,$3}' test1.txt>test2.txt
如果有一行没有三个分割,可能会出现a+++b+++
这样的情况
awk中的$0 代表一整行数据。
NF
每一行拥有的字段总数
NR目前所处理的是第几行的数据
FS 目前的分隔字符串,默认是空格键
注意awk是单引号,里面的print 要用双引号
awk的基本格式如下,可以多个条件嵌套
awk '条件{动作} 条件{动作} ' 多个条件可以用回车直接区分
变量也不需要声明,直接使用就可以。
cat pay.txt | \
>awk 'NR==1{printf "s s s s s\n",$1,$2,$3,$4,"Total" }
NR>=2{total = $2 + $3 + $4
printf "%s %d %d %d .2f\n", $1, $2, $3, $4, total}'
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
高级的一些编写
1. NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。
http://wenku.baidu.com/link?url=FqdYRD2wUYGyhEJsNtDvxK87Mh_HBaSfQBwqo6r7FdD3hkZQSevaEGl-3a1aUZ5H5ucecn71O4Zj3uh3-rQrMmE5DWpFoRechCBa8Tv_M6K