在awk中结合if和NR

时间:2015-10-18 10:32:05

标签: bash awk

在过去的几个小时里,我一直试图用awk来解决这个愚蠢的事情,但到目前为止还没有运气。 我理解如何绘制每一行,例如:

awk 'NR%2' file

我还了解如果一列在特定范围内,如何打印基于列的文件,例如:

awk '{if ($1 > 'yourvalue') print}' file

我不太了解的是如何将两者结合起来。 在实践中,如果我有一个文件组织为:

1 3 6 8
2 8 4 5
3 9 8 7
4 7 3 5
5 7 3 6
6 2 4 6
7 1 4 7
8 3 2 1
9 7 5 3
10 4 5 6
11 8 2 5

我怎样才能获得,例如:

1 3 6 8
3 9 8 7
5 7 3 6
7 1 4 7
8 3 2 1
9 7 5 3
10 4 5 6
11 8 2 5

如果第1列小于7则返回每两行并正常打印其余行。 我试图将所有内容组合在一行中,但我总是遇到错误。

2 个答案:

答案 0 :(得分:2)

您可以撤消第二个条件并使用OR条件将它们组合起来:

awk 'NR%2 || $1>=7' file
1 3 6 8
3 9 8 7
5 7 3 6
7 1 4 7
8 3 2 1
9 7 5 3
10 4 5 6
11 8 2 5

答案 1 :(得分:1)

您可以使用&&(和)和||(或)组合条件。 您可以使用括号来嵌套条件。 例如:

awk 'cond1 && (cond2 || cond3)' file

此:

awk '{if ($1 > 7) print}' file

......等同于:

awk '$1 > 7 { print }' file

...因为您可以在{...}之外编写条件以用作过滤器

......相当于:

awk '$1 > 7' file

...因为默认操作是打印。