我在bash中有以下脚本。
awk -F ":" '{if($1 ~ "^fall")
{ NR==1
{{printf "\t<course id=\"%s\">\n",$1} } } }' file1.txt > container.xml
所以我有一个小文件。如果任何行以下降开头,那么我想要非常第一行的第一个字段。
所以我在代码中执行了此操作并设置NR==1
。但是,它没有做到这一点!
答案 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
选项不是必需的 特征;它只是为了向后兼容。