awk如果模式不符合任何条件,则打印文本

时间:2018-12-20 19:49:49

标签: awk

下面的awk用于file的两个可能结果,即tab delimeted。选项1是file仅包含一个标题行,下面没有任何内容。选项2为file将包含相同的标题行,但标题行下面。 awk读取file,如果它是选项1或仅标头,则打印1 0 0 0 0(制表符分隔)。如果file是选项2或标题下有行的标题,则不执行任何操作。目录中的file可能不止一个,但格式始终相同。

文件(选项1)

R_Index Chr Start   End Gene

文件(选项2)

R_Index Chr Start   End Gene
1   1   100 300 xxx
2   2   200 250 yyy

如果选项1为所需输出

R_Index Chr Start   End Gene
1   0   0   0   0

awk

awk -F'\t' '{if ($0 ~ /R_Index\tChr\tStart\tEnd\tGene/) {print "1\t0\t0\t0\t0} else {next}}1' file > tmp && mv tmp file

awk -F'\t' '/R_Index\tChr\tStart\tEnd\tGene/{print "1\t0\t0\t0\t0"; next}1' file

1 个答案:

答案 0 :(得分:2)

这应该做:

$ awk -v OFS='\t' 'NR==1 && $0!="R_Index\tChr\tStart\tEnd\tGene"{NR=0; exit 1}1; 
                   END {if(NR==1){print 1,0,0,0,0; exit 0} exit 1}' file > tmp && mv tmp file

仅当需要添加第二行时,退出状态才会成功,然后触发通过tmp文件更新文件。