Linux 学习笔记:AWK 命令


参数含义

awk '{[pattern] action}' {filenames}   # 行匹配语句 awk '' 只能用单引号
awk -F  #-F相当于内置变量FS, 指定分割字符
awk -v  # 设置变量
awk -f {awk脚本} {文件名}

 '{print $1}'  指定打印第几元素
awk的默认输入和输出分隔符:
FS : 输入字段分隔符,默认空格。
RS : 输入行分隔符,默认\n。
ORS : 输出行分隔符,默认\n。

取列

awk -F ',' '{print $1}' file.txt 

删除列

cat ./test.txt | awk -F, '{$2=null;print $0}'

添加列(添加一列自增数据)

awk -v OFS="\t" -F"\t" '{{s+=1} {print $0,"R"s}}' file.txt

按tab键分割及输出

awk -v OFS="\t" -F'\t' '{print $3,$4,$6}' file.txt

重复的取第一个

awk -v OFS="\t" -F'\t' '!a[$11]++'  blat_R1.psl 

按照统一ID合并2个文件内容

awk -F '|' 'NR==FNR{a[$2]=$0;next}{print a[$1]"|"$2}' a b

注释:
由NR=FNR为真时,判断当前读入的是第一个文件a,然后使用{a[$2]=$0;next}
循环将a文件的每行记录都存入数组a,并使用$2第2个字段作为下标引用.
由NR=FNR为假时,判断当前读入了第二个文件b,然后跳过{a[$2]=$0;next},
对第二个文件cdr的每一行都无条件执行{print a[$1]"|"$2},
此时变量$1为第二个文件的第一个字段,与读入第一个文件时,采用第一个文件第二个字段$2为数组下标相同.
因此可以在此使用a[$1]引用数组。

数据格式
在这里插入图片描述

根据序列ID提取fastq序列

awk -F ' ' 'NR==FNR {a[$1]=1; next} { if (a[substr($1,2)]) {print $0; getline b; print b ;getline b; print b ;  getline b; print b ;}}'  list.txt  fastq.file

版权声明:本文为dujidan原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。