我有一个由xyz坐标组成的文本文件,每个坐标都定义了坡度的特定深度轮廓。 所有这些行都存储在一个文件中,每个轮廓用“>”
分隔文件如下:
>
x1 y1 z1
x2 y2 z2
>
x3 y3 z3
...
文件巨大且笨拙,我想沿着每个轮廓打印出第7点,并将其通过管道输入到制表符分隔的新文件中。
我的代码如下:
awk -v OFS='\t' -v count=1 '{if ($1 == ">") {count/=count}; else if (count%7 == 0) {{count+=1} print $0}; else {count+=1}}' infile > outfile
我不断收到一条错误消息,提示
awk: syntax error at source line 1
context is
{if ($1 == ">") {count/=count}; >>> else <<< if (count%7 == 0) {{count+=1}; print $0}; else {count+=1}}
awk: illegal statement at source line 1
我花了一段时间检查我的语法和括号,这似乎还可以,我可能只是因为变量重新分配而丢失了一些东西?
答案 0 :(得分:0)
您的语法非常接近;只是一点点关闭。括号{ }
和普通括号之间似乎有些混淆。随着您更多地玩awk,差异会变得更加清晰。
在讨论您的特定语法问题之前,请注意,一种更简单的方法可以解决相同的问题:
awk -v OFS='\t' '$1 == ">" { count = 1; next } !(count++ % 7)' file
一个多行版本,您的更正代码将是:
{
if ($1 == ">") {
count = 1
}
else
if (count % 7 == 0) {
count += 1
print $0
}
else
count += 1
}
只要一条语句本身就行,就不需要分号。但是请注意,要使其成为单线,则需要如下所示:
{ if ($1 == ">") { count = 1 } else if (count % 7 == 0) { count += 1; print $0 } else count += 1 }