awk没有打印文件的预期结果

时间:2017-04-25 14:40:44

标签: awk

在下面的awk中,我预计添加NR==2只会打印检查第二行$1值,1并确保它是一个数字。如果是,则打印Index is a number其他 Index is not a number。它似乎很接近,但结果不是预期的......也许我使用了错误的变量?谢谢你:)。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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来将此扩展到任意行数,这样您就可以跳过标题。

答案 2 :(得分:1)

使用以下方法:

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

输出:

Index is a number

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