awk未打印文件的预期结果

awk未打印文件的预期结果,awk,Awk,在下面的awk中,我预计添加NR==2只会打印检查第二行$1值,1并确保它是一个数字。如果是,则打印索引是一个数字否则 索引不是数字。这似乎很接近,但结果不是预期的。。。也许我用错变量了?谢谢:) 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

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

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

期望输出

Index is a number
  • 如果只想检查第2行,则必须在处理后退出
  • 如果需要其他字段分隔符,请添加
    -F
    选项
  • 如果只想检查第2行,则必须在处理后退出
  • 如果需要其他字段分隔符,请添加
    -F
    选项

我想你在寻找下面这样的东西

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
来将其扩展到任意数量的行,这只允许您跳过标题。

我想您正在寻找以下内容

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
来将其扩展到任意数量的行,这只允许您跳过标题。

使用以下方法:

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

Index is a number


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

使用以下方法:

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

Index is a number


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

您从哪里知道所有大写字母
ELSE
都是awk语言结构?您从哪里知道所有大写字母
ELSE
都是awk语言结构?谢谢大家的帮助和解释:)。谢谢大家的帮助和解释:)。