在过去的几个小时里,我一直试图用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则返回每两行并正常打印其余行。 我试图将所有内容组合在一行中,但我总是遇到错误。
答案 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
...因为默认操作是打印。