【问题标题】:awk - Issues with if else statementsawk - if else 语句的问题
【发布时间】:2025-08-20 05:50:02
【问题描述】:

file.txt为以下文件

1
2
3
5
6
7
15
16
17
19
20
23
24

我试图编写一个awk 命令来打印丢失的数字范围。当范围仅包含一个数字时,应仅打印该数字。预期的输出是

4
8-14
18
21-22

This post 几乎用一个班轮为我完成了这项工作

awk '$1!=p+1{print p+1"-"$1-1}{p=$1}' file.txt

4-4
8-14
18-18
21-22

我尝试将其修改为

awk 'if ($1!=p+1){if (p+1!=$1-1) {print p+1"-"$1-1} else {print p+1} }{p=$1}' file.txt

但它没有按预期工作。我似乎误解了 if-else 语法。我究竟做错了什么?

【问题讨论】:

  • 阅读 Arnold Robbins 的《Effective Awk Programming, 4th Edition》一书的前几页来解决这个问题。然后阅读本书的其余部分:-)。

标签: bash if-statement awk


【解决方案1】:

你可以使用:

awk '$1 != p+1 {print p+1 ($1-1 > p+1 ? "-" $1-1 : "")} {p=$1}' file

4
8-14
18
21-22

【讨论】:

  • 对不起,我忘了检查您的答案(或回复您的评论)。是的,它工作得很好。我已经用过很多次了,也做了很多修改。谢谢! +1