awk备忘,强大的awk

 

越来越发现awk的强大,做了实验,做了总结 备忘!!

 

/**在linux shell中调用awk  (awk 'xxxxxxx'  xxxxxxx即为awk命令,命令必须包含在单引号中,至少双引号都不行)**/

 

/**awk 显示文本文件myfile中中以字符%分隔的第一字段,第三字段和第七字段及NF(域的个数):**/

方法一:awk -F '%' 'NR==7,NR==15 {print $1 $3 $7 NF}'  

方法二:awk '{FS="%"} NR==7,NR==15 {print $1 $3 $7 NF}'

 

{FS="%"}:设置awk分隔符

 

 

NF:显示域的个数(不是分隔符数,一般应该是分隔符数加1)

# cat test1.txt

aa bb c

 

# cat test1.txt | awk '{print NF}'

3

 

NR==7,NR==15:第七行到第十五行 (貌似只能设两个,设置三个会报错 如:NR==7,NR==15,NR==20)

注意:NR==7,NR==15 {print $1 $3 $7 NF} 要写在一行里,中间不能有分号

 

print:打印时会换行,printf:打印时不会换行 (还没弄明白为什么)

 

 

/**awk显示第5列有A,L或LIKE的所有列 **/

awk '$5~ /[A,L,LIKE]/  {print $0}' tmp.txt 

 

/**awk显示第5列不包含A或L的所有列 **/

awk '$5!~'/[A,L]/' {print $0}' tmp.txt 

 

 

/**打印行号,OFS在$1,$2之间以"-"分隔**/

 awk 'OFS="-" {print NR,$1,$2 }' tmp.txt

 

NR:行号

OFS:将需要输出数据的分隔符

# cat test1.txt

aa bb c

 

# cat test1.txt |awk ' OFS="-" {print $0}'

aa bb c

--因为没有分隔符,也没分域,相当于只有一个域,所以没打出"-"

 

#cat test1.txt |awk ' OFS="-" {print $1 $2 $3}'

aabbc

--不带分隔符打出各域

 

# cat test1.txt |awk ' OFS="-" {print $1, $2, $3}'

aa-bb-c

--有了逗号,所以中间要有分隔符

 

 

/**利用BEGIN和END打印页眉页脚(支持转义)**/

# awk 'BEGIN {print "begin\nbegin2"}{print $0}{print $0}END{print "end"}' test1.txt 

begin

begin2

aa bb c

aa bb c

end

 

 

/**把test1.txt前面加上行号,追加到tt22中**/

#awk '{print NR,$0 >> "./tt22"}' test1.txt

#cat tt22 

1 aa bb c

 

 

/**管道输出并执行shell命令**/

awk '{print $0 | "sort"}' tmp.txt 

 

# cat test2.txt 

1

3

2

 

# awk '{print $0 | "sort"}' test2.txt 

1

2

3

 

/**从文件读取awk命令并执行: awk -f awk脚本名 目标文件 **/

 

# cat test.awk 

BEGIN {FS="\t";OFS="-"}

 

{print $1,$2}

 

# cat test2.txt 

1

3

2

 

# awk -f test.awk test2.txt    

1-

3-

2-

 

 

/**把第一竖排变成横排**/

#awk '{printf("%s,",$1)}' test2.txt  

1,3,2,

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值