if-statement - awk if-else 和变量重新分配
问题描述
我有一个由 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
我花了一段时间检查我的语法和括号,看起来没问题,我可能只是在变量重新分配时遗漏了一些东西?
解决方案
您的语法非常接近;只是有点偏离。看起来花括号{ }
和普通括号之间可能存在一些混淆。随着您使用 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 }
推荐阅读
- objective-c - 获取在 Objective-C Cocoa 中打印的页数
- json - 在 json 翻译字符串中添加 span 标签
- scala - 如何将 Scala 中的 DataFrame[result : String] 转换为多行?
- java - 如何将包含“+=��@0���o2E”的字符串转换为短数组?
- android - 如何修复反应原生android中找不到的资源
- c# - 使用线程填充 TreeGridVew
- python - Python不转换日期
- angular - core.js:6014 错误错误:未捕获(承诺):错误:无法匹配任何路由。网址段:'qa'
- html - 使用垫子按钮以角度构建导航栏
- asciidoc - asciidoc 中的菜单