2017-04-25 38 views
0

打印预期的结果在下面awk我预计增加NR==2只打印支票二号线$1值时,1并确保它是一个数字。如果是,则打印Index is a number其他 Index is not a number。它似乎很接近,但结果不是预期的......也许我使用了错误的变量?谢谢 :)。AWK不是从文件

file.txt的

Index Chr Start End Ref Alt Quality Freq Score HGMD 
1 1 10 100 A - GOOD .002 2 . 
2 1 100 1000 - C STRAND BIAS .036 10 . 
3 5 50 500 AA T GOOD 1 5 . 

AWK

awk -F'\t' 'NR==2 $1 ~ /^[[:digit:]]/ {print "Index is a number"} ELSE {print "Index is not a number"}' file.txt 
Index is a number 
Index is a number 
Index is a number 
Index is a number 
Index is a number 

期望的输出

Index is a number 
+0

你从哪里得到的想法,所有的大写'ELSE'是awk语言结构? –

回答

1
awk 'NR==2 {print "Index is "($2~/^[0-9]+$/?"":"not ") "a number";exit}' file 
  • 如果你只是要检查2号线,你必须exit处理
  • 后,如果您还需要其他字段分隔符,添加-F选项
1

我认为你正在寻找的东西像下面,

awk 'BEGIN{FS="\t"} NR==2 { if (match($1,/^[[:digit:]]/)) { print "Index is a number" } else { print "Index is not a number" } }' file 
Index is a number 

你当然可以把它扩展到任意通过删除NR==2或添加NR>1允许你只跳过标题的行数。

+0

谢谢大家的帮助和解释:)。 – Chris

1

用下面的办法:

awk 'NR==2{printf("Index is%s a number\n", ($1~/^[0-9]+$/)? "":" not")}' file.txt 

输出:

Index is a number 

$1~/^[0-9]+$/ - 确保了第一场是一个数字