1 比较两个文件
NR:表示awk开始执行程序后所读取的数据行数。(ALL)
FNR:awk当前读取的记录数,其变量值小于等于NR(比如当读取第二个文件时,FNR是从0开始重新计数,而NR不会)。(Single File)
NR==FNR:用于在读取两个或两个以上的文件时,判断是不是在读取第一个文件。
awk处理多个文件的基本语法是:
awk -F分隔符 'BEGIN { 初始化 } { 循环执行部分 } END { 结束处理 }' file_list1 file_list2 其中BEGIN和END可以省略,-F也可以使用默认。
例子:
awk '{ print NR,$0 }' file1
awk '{ print NR,$0 }' file1 file2
awk '{ print NR,$0 }' file1 file2
2 合并文件
awk -F | 'NR==FNR { a[0; next } { print a[
2 }' file1 file2
file1的第二列为数组索引(相当于哈希的key),数组的值为第一个文件的$0;当到到第二个文件,第一个执行{}跳过。打印以当前文件的第一列为索引的数组的值以|连接当前文件的第二列
awk -F' ' 'NR==FNR { a[$2]=$3 } END { for(i in a) { print i,a[i] } }' file1 file2
awk 'NR==FNR{a[$1]=$0;} NR!=FNR{if(a[$14]||a[11]){print $0}}' $target $file7
3 可用一下命令将折行的序列合并为一行
awk '/^>/ {printf("\n%s\t",$0);next;} {printf("%s",$0);} END {printf("\n");}' < assembly.fasta | egrep -v '^$' | tr "\t" "\n" > assembly.fas
3 awk if else
awk '{if(/regex/)printf("\n%s\n",$0);else print $0}'
awk '$3<1 {print $0}' DMD.AC_DM18A1004.bam.DMD.g.depth
4 捕获
sed 's/.*\(ip"[^,]*,\).*/\1/' 3235_click_20170719_export.txt
awk '{match($0,/(ip"[^,]*,)/,a);print a[1]}'