学习笔记: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