AWK脚本检查文件的第一行,然后打印其余文件

and*_*kan 2 regex bash awk fasta

我正在尝试编写一个AWK脚本来解析表单的文件

> field1 - field2 field3 ...
lineoftext
anotherlineoftext
anotherlineoftext
Run Code Online (Sandbox Code Playgroud)

我正在检查使用正则表达式,如果第一行是正确的(以>开头,然后有一些东西),然后打印所有其他行.这是我写的脚本,但它只验证文件的格式是否正确,然后不打印任何内容.

#!/bin/bash
# FASTA parser

awk ' BEGIN { x = 0; }
{ if ($1 !~ />.*/ && x == 0)
    { print "Not a FASTA file"; exit; }
  else { x = 1; next; }
  print $0 }
END { print " - DONE - "; }'
Run Code Online (Sandbox Code Playgroud)

hek*_*mgl 8

基本上你可以使用以下awk命令:

awk 'NR==1 && /^>./ {p=1} p' file
Run Code Online (Sandbox Code Playgroud)

在第一行,NR==1它检查行是否以a开头,>后跟"something"(/^>./).如果该条件为真,则变量p将设置为1.将p在年底检查是否p判断为真,并打印在这种情况下就行了.

如果要打印错误消息,则需要稍微恢复逻辑:

awk 'NR==1 && !/^>./ {print "Not a FASTA file"; exit 1} 1' file
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果第一行不以a开头,程序将打印错误消息并退出程序>.否则所有行都会被打印,因为1总是计算为true.