根据列中的值选择行

Tom*_*Tom 5 bash awk

我有一个制表符分隔表,我想要打印列'x'大于'Y'的所有行.我尝试使用下面的代码,但我是使用awk的新手,所以我不确定如何根据列使用它.

awk '$X >= Y {print} ' Table.txt | cat > Wanted_lines 
Run Code Online (Sandbox Code Playgroud)

Y是1到100之间的值.

如果输入如下,列X是第二列.

1    30
2    50
3    100
4    100
5    80
6    79
7    90
Run Code Online (Sandbox Code Playgroud)

想要的输出是:

3    100
4    100
5    80
7    90
Run Code Online (Sandbox Code Playgroud)

该文件的前两行是:

1   OTU1    243622  208679  121420  265864  0   0   2   0   0   11  1   5   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   839604  OTU1    -   Archaea 100%    Euryarchaeota   100%    Methanobacteria 100%    Methanobacteriales  100%    Methanobacteriaceae 100%    Methanobrevibacter  100%
2   OTU2    84366   120817  15834   74737   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   295755  OTU2    -   Archaea 100%    Euryarchaeota   100%    Methanobacteria 100%    Methanobacteriales  100%    Methanobacteriaceae 100%    Methanobrevibacter  100%
Run Code Online (Sandbox Code Playgroud)

Ant*_*dge 5

第一的

awk 的默认内部字段分隔符 (FS) 将适用于空格或制表符分隔的文件。

第二

awk '$x > FLOOR' Table.txt
Run Code Online (Sandbox Code Playgroud)

$x目标列在哪里,FLOOR实际数字下限(即 5000 等...)

示例文件:awktest

500  100
400  1100
1000 400
1200 500


awk '$1 > 1000' awktest

1200   500

awk '$1 >= 1000' awktest

1000   400 
1200   500
Run Code Online (Sandbox Code Playgroud)

因此,您应该能够使用关系表达式来打印 x > y 的行,格式如下:

awk '$x > $y' awktest
Run Code Online (Sandbox Code Playgroud)

其中$x是数字列,如$1、 或其他。

其中$y是数字列,如$2、 或其他。

例子

awk '$1 > $2' awktest
Run Code Online (Sandbox Code Playgroud)

或者 ...

awk '$2 > $1' awktest
Run Code Online (Sandbox Code Playgroud)

awk 数字是浮点数,因此您也可以比较小数。