Linux脚本:在特定列中搜索关键字

时间:2012-04-29 23:12:45

标签: linux search awk grep

我有一个包含多列数据的大型文本文件。我正在尝试编写一个脚本,从命令行接受列号和关键字,并在显示任何匹配的整行之前搜索任何匹配。

我一直在尝试以下方面:

grep $fileName | awk '{if ($'$columnNumber' == '$searchTerm') print $0;}'

但这根本不起作用。我在正确的路线上吗?谢谢你的帮助!

2 个答案:

答案 0 :(得分:2)

-v选项可用于将shell变量传递给awk命令。

您可能正在寻找以下内容:

awk -v s=$SEARCH -v c=$COLUMN '$c == s { print $0 }' file.txt

修改

我总是试图编写更优雅,更紧凑的代码。所以这就是丹尼斯的意思:

awk -v s="$search" -v c="$column" '$c == s { print $0 }' file.txt

答案 1 :(得分:0)

看起来足够合理。尝试使用set -x查看传递给awk的确切内容。你也可以使用不同的和/或更多的awk东西,包括摆脱单独的grep:

awk -v colnum=$columnNumber -v require="$searchTerm"
    "/$fileName/ { if (\$colnum == require) print }"

通过设置awk变量(在本例中为colnumrequire)然后使用文字字符串$colnum来获取所需字段和变量{{1}获取必需字符串。

请注意,在所有情况下(使用或不使用require命令),grep中的任何正则表达式元字符都将是元-y,例如,$fileName将匹配文件命名为this.that,但名为this.that