将NR设置为1不起作用(awk)

时间:2014-11-09 20:02:55

标签: bash awk

我在bash中有以下脚本。

awk -F ":" '{if($1 ~ "^fall") 
                      { NR==1
                      {{printf "\t<course id=\"%s\">\n",$1} } } }' file1.txt > container.xml

所以我有一个小文件。如果任何行以下降开头,那么我想要非常第一行的第一个字段。

所以我在代码中执行了此操作并设置NR==1。但是,它没有做到这一点!

3 个答案:

答案 0 :(得分:1)

试试这个:

awk -F: 'NR==1 {id=$1} $1~/^fall/ {printf "\t<course id=\"%s\">\n",id}' file1.txt > container.xml

注意:

  • NR==1 {id=$1}

    这会保存第一行的课程ID

  • $1~/^fall/ {printf "\t<course id=\"%s\">\n",id}

    如果任何行以fall开头,则会打印课程ID。

  • 上面的代码说明awk命令可以在条件之前。因此,id=$1仅在位于第一行时才会执行NR==1。如果采用这种方式,通常不必使用明确的if语句。

  • awk中,使用=完成作业,同时使用==进行相等性测试。

如果这不能做你想做的事,那么请在问题中添加样本输入和相应的所需输出。

答案 1 :(得分:1)

awk -F: 'NR==1{x=$1}/^fail/{printf "\t<course id=\"%s\">\n",x;exit}' file

注意:

  • 如果文件包含以fail开头的任何行,请以特定格式(xml标记)打印第一行中的第一个字段。
  • 无论以fail作为开头有多少行,它只输出xml标记一次
  • 如果文件没有以fail开头的行,则不输出任何内容。

答案 2 :(得分:0)

#!awk -f
BEGIN {
  FS = ":"
}
NR==1 {
  foo = $1
}
/^fall/ {
  printf "\t<course id=\"%s\">\n", foo
}

另请注意

  

BUGS   给定命令行变量赋值时,-F选项不是必需的   特征;它只是为了向后兼容。

awk man page