awk常用命令

作者: 生信编程日常 | 来源:发表于2019-12-26 10:59 被阅读0次

awk在处理文件的时候,常常比编写脚本更加方便,处理速度也更快,下边总结了一些awk的常用用法。

现在新建两个文件, test1.txt和test2.txt,对这两个文件进行处理。其中,test1.txt内容如下:

image

test2.txt内容:

image
  1. 输出某一列

$0为整行,$1 为第一列,$2为第二列…… 最后一列可以表示为$NF,倒数第二列为$(NF-1)…

awk -F '\t' '{print $1}' test1.txt # 输出第一列
awk -F '\t' '{print $2+1}' test1.txt # 输出第二列加1
awk -F '\t' '{print $0"\t"$2+1}' test1.txt 

最后一行代码的输出为:

image
  1. 输出某一行
awk 'NR==1{print}' test1.txt
  1. 比较两列是否相同
awk -F '\t' '$1==$2' test1.txt # 只有在相同的时候才会输出

4. 做四则运算

# shell中做运算是比较麻烦的,但是借助awk可以方便的实现
# 除法,并保留两位小数
num=1
awk 'BEGIN{printf "%.2f\n", ('$num'/10)}'
# 或者
echo "1" "10" | awk '{printf "%.2f\n", $1/$2}'
​
# 加法同理
echo "1" "10" | awk '{print $1+$2}'

5. 输出文件列数

head -n 1 test1.txt | awk -F '\t' '{print NF}'
  1. 比较两个文件某几列的交集
awk -F '\t' 'FNR==NR{x[$1"\t"$2];next} ($1"\t"$2 in x)' test1.txt test2.txt
# 等同于
 awk -F '\t' 'FNR==NR{x[$1"\t"$2];next} {if ($1"\t"$2 in x) {print $0}}' test1.txt test2.txt

ps. FNR是当前文件的行号,NR是所有文件的总行号。当在处理第一个文件test1.txt的时候,FNR==NR,执行第一个大括号,也就是将test1.txt中的第一列和第二列存到数组x中,当处理到第二个文件test2.txt的时候,NR>FNR,执行第二个大括号,判断第二个文件的第一二列是否在数组x中。

7. 正则匹配

# 匹配第一列开头是^或者第二列开头和结尾是1的行
awk '{FS="\t"}{if($1~/^th/ || $2~/^1$/) {print $0}}' test1.txt
  1. 判断
# 输出第二列大于3的行
awk '$2>3' test1.txt
# 等同于
awk '{if ($2>3) {print $0}}' test1.txt
  1. 计算某一列总和/最大、小值
# 第二列总和
awk 'BEGIN{total=0}{total+=$2}END{print total}' test1.txt
​
# 最大值
 awk 'BEGIN {max = 0} {if ($2+0>max+0) max=$2 fi} END {print max}' test1.txt
 
 # 最小值
 awk 'BEGIN{min = 10000}{if ($2+0<min+0) min=$2 fi}END{print min}' test1.txt

可以看到awk非常方便,短短一行代码即可实现别的语言好几行的内容,活用awk会节省许多时间。

欢迎关注!

相关文章

  • Linux常用命令总结

    Linux常用命令指南 @Date 2017.05.23 tail awk awk ' pattern {acti...

  • linux-awk常用命令

    linux-awk常用命令 awk从放弃到入门[https://www.zsythink.net/archives...

  • Linux命令总结

    linux三剑客awk、grep、sed应用环境即常用命令 linux常用命令链接 https://man.lin...

  • 2018-10-14

    Linux常用命令之sed awk(关键字:分析&处理)一行一行的分析处理 awk '条件类型1{动作1}条件类型...

  • PHP高手进阶指南

    Linux常用命令 grep、awk、sed、sort、uniq、ps、df Linux系统性能分析 vmstat...

  • Linux 常用命令总结

    linux 命令速查手册linux 常用操作命令 sed 简明教程 awk 简明教程 常用命令 ls ...

  • Java程序员必备——Linux的面试常见问题及面试题!你知道多

    一. 常用命令 1. 编辑相关 ①. awk NF:字段总数 NR:第几行数据 FS:分隔字符 ②. sed -n...

  • 常用命令-awk

    awk是Linux处理文本的利器,在linux日常处理中,发挥很重要的作用,学会使用awk可以让你的处理文本工作事...

  • awk常用命令

    awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大...

  • awk常用命令

    1. 准备文件 准备文件test.log,内容如下。三项分别是:日期,项目,版本号 2. 基本打印 打印第一列 打...

网友评论

    本文标题:awk常用命令

    本文链接:https://www.haomeiwen.com/subject/bpskoctx.html