使用AWK根据列的数值过滤文件(其中列号和数值从命令行传入)

使用AWK根据列的数值过滤文件(其中列号和数值从命令行传入)

我有一个以制表符分隔的文件。我正在尝试使用 AWK 来过滤文件,以便用户可以指定列号和数字,并且脚本将仅返回文件(和标题)中指定列中的值大于该值的行数字。例如,如果我想要第 3 列和 0.28 的阈值,我想采用以下文件

Col1 Col2 Col3 Col4 Col5
...  ...  0.12 ...  ...
...  ...  0.323 ...  ...
...  ...  0.4123 ...  ...
...  ...  0.002 ...  ...
...  ...  0.896 ...  ...

并得到

Col1 Col2 Col3 Col4 Col5
...  ...  0.323 ...  ...
...  ...  0.4123 ...  ...
...  ...  0.896 ...  ...

我尝试过以下脚本

#!/bin/bash

#For testing

echo $1

echo $2

echo $3

awk -v col="$1" -v val="$2" '$col > $val' filename

当我尝试运行时bash script.sh 3 0.28 filename,我没有打印出文件的任何行。由于 echo 命令,唯一出现的是打印出 3、0.28 和文件名。

但是,如果我更改脚本,使其显示

awk -v col="$1" -v val="$2" '$col > 0.28' filename

我得到了预期的过滤行为。我认为这可能$val没有被解释为数字,所以我尝试了

awk -v col="$1" -v val="$2" '$col > ($val + 0)' filename

这会导致文件的每一行都被打印出来,这让我认为它被评估为 TRUE。我是 AWK 新手,所以我不知道如何从这里开始。

相关内容