awk、sed使用

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]}' 

你可能感兴趣的:(awk、sed使用)