2018-06-11浏览量:449

awk随笔

awk是linux下一款强大的文本处理工具,今天就带大家来了解一下它的一些简单功能。当然如果大家遇到的是一些较为复杂的问题,还是得考虑用脚本来解决问题。

 1、对多列求和

awk 'NR==1{print $1,$2"+"$3}NR!=1{print $1,$2+$3}' file

# 输出第一行的标签,并对剩余的行打印第一个域,第二个域和第三个域的和。

  2、 对一列求总和

awk 'NR!=1{sum += $2} END {print sum}' file

# 对除第一行之外行的第二个域求和。

 3、筛选符合条件的数值

awk '$2 < 0.05' file

# 输出第二列小于0.05的行

  4、去除某个域或者某几个域重复的行

awk '!a[$1,$2]++' file

# 如果第一第二个域都重复,那么就只保留第一次出现的行。

 5、拆分文件

awk '{print > $1}' file

# 此命令会将第一个域内容一样的行输出到以第一个域为命名的文件中。

原文件为:

一个文件内容根据第一个域不同被分成多个文件:

  6、一行变多行

原文件为:

经过变换就变成了:

 

7、 多行变一行

awk '{arr[$1]=($1 in arr ? arr[$1]","$2 : $0)} END{for (k in arr) print arr[k]}' file

原文件为:

变换后变成了:

# 句中,判断第一个域是不是第一次出现,若是第一次出现,则将这一行的内容放到数组arr中,若不是第一次出现,则将第二个域的内容追加到之前出现过的那个元素后,当所有行都执行完成后输出输出arr的值。

  8、同时指定多个分隔符

awk -F '[;\t ]' '{NF-=1;print}' file

# 指定多个分隔符,去除每行最后一个域后输出

 9、利用-v可向awk传参

awk -v a=3 '{print $a}' file

a=3 ; awk '{print $'$a'}' file

# 上述两语句都可以实现输出文件每行的第三个域,第一个是传递一个变量的值到awk执行命令中,第二个则是将'$a'作为shell的命令,得到值3之后将其作为awk中的值。

下一篇

版权所有 上海锐翌生物科技有限公司 沪ICP备16022951号