我有一个制表符分隔表,我想要打印列'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)
第一的
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 数字是浮点数,因此您也可以比较小数。