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语言结构?谢谢大家的帮助和解释:)。谢谢大家的帮助和解释:)。